Use local mode of nsupdate, then we don't even need a keyfile
authorRalf Jung <post@ralfj.de>
Sat, 10 Aug 2013 09:31:11 +0000 (11:31 +0200)
committerRalf Jung <post@ralfj.de>
Sat, 10 Aug 2013 09:31:11 +0000 (11:31 +0200)
dyn-nsupdate.cpp
update.py

index 7c39136e37c1321795ccf7718eb59b4538e874ae..25381cff5d09219af2cf9c5a5209a83534907eb8 100644 (file)
@@ -50,7 +50,6 @@ int main(int argc, const char ** argv)
        property_tree::ptree config;
        property_tree::ini_parser::read_ini(CONFIG_FILE, config);
        std::string nsupdate = config.get<std::string>("nsupdate");
        property_tree::ptree config;
        property_tree::ini_parser::read_ini(CONFIG_FILE, config);
        std::string nsupdate = config.get<std::string>("nsupdate");
-       std::string keyfile = config.get<std::string>("key");
        
        /* Check username, password, domain */
        optional<std::string> correct_password = config.get_optional<std::string>(user+".password");
        
        /* Check username, password, domain */
        optional<std::string> correct_password = config.get_optional<std::string>(user+".password");
@@ -64,8 +63,11 @@ int main(int argc, const char ** argv)
        }
        
        /* preapre the pipe */
        }
        
        /* preapre the pipe */
-       int pipe_ends[] = {0,0};
-       pipe(pipe_ends);
+       int pipe_ends[2];
+       if (pipe(pipe_ends) < 0) {
+               std::cerr << "Error opening pipe." << std::endl;
+               exit(1);
+       }
 
        /* Launch nsupdate */
        pid_t child_pid = fork();
 
        /* Launch nsupdate */
        pid_t child_pid = fork();
@@ -82,18 +84,16 @@ int main(int argc, const char ** argv)
                        exit(1);
                }
                /* exec nsupdate */
                        exit(1);
                }
                /* exec nsupdate */
-               execl(nsupdate.c_str(), nsupdate.c_str(), "-k", keyfile.c_str(), (char *)NULL);
+               execl(nsupdate.c_str(), nsupdate.c_str(), "-l", (char *)NULL);
                /* There was an error */
                std::cerr << "There was an error executing nsupdate." << std::endl;
                exit(1);
        }
        
        /* Send it the command */
                /* There was an error */
                std::cerr << "There was an error executing nsupdate." << std::endl;
                exit(1);
        }
        
        /* Send it the command */
-       write(pipe_ends[1], "server localhost\n");
-       
        write(pipe_ends[1], "update delete ");
        write(pipe_ends[1], domain.c_str());
        write(pipe_ends[1], "update delete ");
        write(pipe_ends[1], domain.c_str());
-       write(pipe_ends[1], ".\n");
+       write(pipe_ends[1], ". A\n");
        
        write(pipe_ends[1], "update add ");
        write(pipe_ends[1], domain.c_str());
        
        write(pipe_ends[1], "update add ");
        write(pipe_ends[1], domain.c_str());
index 8c87e3ad1acfad34d6e8e265cdcfcfc31af0eaf2..0642c40927e188fd439c7669fc5b05c48c8d6bbb 100644 (file)
--- a/update.py
+++ b/update.py
@@ -14,10 +14,10 @@ if "user" not in form or "password" not in form or "domain" not in form or "ip"
     print "Mandatory argument missing: You must supply all of 'user', 'password', 'domain', 'ip'"
     sys.exit()
 
     print "Mandatory argument missing: You must supply all of 'user', 'password', 'domain', 'ip'"
     sys.exit()
 
-ip = form["ip"].value
-domain = form["domain"].value
 user = form["user"].value
 password = form["password"].value
 user = form["user"].value
 password = form["password"].value
+domain = form["domain"].value
+ip = form["ip"].value
 
 # run update program
 p = subprocess.Popen(["/var/lib/named/dyn-nsupdate", user, password, domain, ip], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 
 # run update program
 p = subprocess.Popen(["/var/lib/named/dyn-nsupdate", user, password, domain, ip], stdout=subprocess.PIPE, stderr=subprocess.PIPE)