update-client: exit 1 in case of failure; make the server we talk to configurable
[dyn-nsupdate.git] / dyn-nsupdate.cpp
index 4cb7ead86ec2ff1c178cffedee3cbb7037b66597..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");
-       std::string keyfile = config.get<std::string>("key");
        
        /* 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 */
-       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();
@@ -77,20 +79,21 @@ int main(int argc, const char ** argv)
                /* We're in the child */
                /* Close write end, use read and as stdin */
                close(pipe_ends[1]);
-               dup2(pipe_ends[0], fileno(stdin));
+               if (dup2(pipe_ends[0], fileno(stdin)) < 0) {
+                       std::cerr << "There was an error redirecting stdin." << std::endl;
+                       exit(1);
+               }
                /* exec nsupdate */
-               execl(nsupdate.c_str(), nsupdate.c_str(), "-k", keyfile.c_str(), 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 */
-       write(pipe_ends[1], "server localhost\n");
-       
        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());