X-Git-Url: http://git.openwrt.org/?p=project%2Fucert.git;a=blobdiff_plain;f=usign-exec.c;h=0dde81ed647b94a382044d97695fe25b497a4443;hp=7f6106580b166ca110f0f0e10bce0ff54a7f9cd6;hb=077feb5b5824beb3af28385d350e2398ffe46f27;hpb=fdff10852326122134a60911a3b3c7c2aeab5723 diff --git a/usign-exec.c b/usign-exec.c index 7f61065..0dde81e 100644 --- a/usign-exec.c +++ b/usign-exec.c @@ -46,7 +46,7 @@ int _usign_key_is_revoked(const char *fingerprint, const char *pubkeydir) { #ifdef UCERT_FULL /* * call usign -S ... - * return WEXITSTATUS or -1 if fork or execv fails + * return WEXITSTATUS or -1 if fork fails */ int usign_s(const char *msgfile, const char *seckeyfile, const char *sigfile, bool quiet) { pid_t pid; @@ -72,23 +72,14 @@ int usign_s(const char *msgfile, const char *seckeyfile, const char *sigfile, bo return -1; case 0: - if ( -#ifdef UCERT_HOST_BUILD - execvp(usign_argv[0], (char *const *)usign_argv) -#else - execv(usign_argv[0], (char *const *)usign_argv) -#endif - ) - return -1; - - break; - - default: - waitpid(pid, &status, 0); - return WEXITSTATUS(status); + execvp(usign_argv[0], (char *const *)usign_argv); + if (!quiet) + perror("Failed to execute usign"); + _exit(1); } - return -1; + waitpid(pid, &status, 0); + return WEXITSTATUS(status); } #else int usign_s(const char *msgfile, const char *seckeyfile, const char *sigfile, bool quiet) { @@ -98,9 +89,9 @@ int usign_s(const char *msgfile, const char *seckeyfile, const char *sigfile, bo /* * call usign -F ... and set fingerprint returned - * return WEXITSTATUS or -1 if fork or execv fails + * return WEXITSTATUS or -1 if fork fails */ -static int usign_f(char *fingerprint, const char *pubkeyfile, const char *seckeyfile, const char *sigfile) { +static int usign_f(char fingerprint[17], const char *pubkeyfile, const char *seckeyfile, const char *sigfile, bool quiet) { int fds[2]; pid_t pid; int status; @@ -136,68 +127,58 @@ static int usign_f(char *fingerprint, const char *pubkeyfile, const char *seckey case 0: dup2(fds[1], 1); - close(0); - close(2); close(fds[0]); close(fds[1]); - if ( -#ifdef UCERT_HOST_BUILD - execvp(usign_argv[0], (char *const *)usign_argv) -#else - execv(usign_argv[0], (char *const *)usign_argv) -#endif - ) - return -1; + execvp(usign_argv[0], (char *const *)usign_argv); + if (!quiet) + perror("Failed to execute usign"); + _exit(1); + } - break; + close(fds[1]); - default: - waitpid(pid, &status, 0); - status = WEXITSTATUS(status); - if (fingerprint && !WEXITSTATUS(status)) { - ssize_t r; - memset(fingerprint, 0, 17); - r = read(fds[0], fingerprint, 17); - if (r < 16) - status = -1; + waitpid(pid, &status, 0); + status = WEXITSTATUS(status); + if (fingerprint && !WEXITSTATUS(status)) { + ssize_t r; + memset(fingerprint, 0, 17); + r = read(fds[0], fingerprint, 17); + if (r < 16) + status = -1; - fingerprint[16] = '\0'; + fingerprint[16] = '\0'; - } - close(fds[0]); - close(fds[1]); - return status; } - - return -1; + close(fds[0]); + return status; } /* * call usign -F -p ... */ -int usign_f_pubkey(char *fingerprint, const char *pubkeyfile) { - return usign_f(fingerprint, pubkeyfile, NULL, NULL); +int usign_f_pubkey(char fingerprint[17], const char *pubkeyfile, bool quiet) { + return usign_f(fingerprint, pubkeyfile, NULL, NULL, quiet); } /* * call usign -F -s ... */ -int usign_f_seckey(char *fingerprint, const char *seckeyfile) { - return usign_f(fingerprint, NULL, seckeyfile, NULL); +int usign_f_seckey(char fingerprint[17], const char *seckeyfile, bool quiet) { + return usign_f(fingerprint, NULL, seckeyfile, NULL, quiet); } /* * call usign -F -x ... */ -int usign_f_sig(char *fingerprint, const char *sigfile) { - return usign_f(fingerprint, NULL, NULL, sigfile); +int usign_f_sig(char fingerprint[17], const char *sigfile, bool quiet) { + return usign_f(fingerprint, NULL, NULL, sigfile, quiet); } /* * call usign -V ... - * return WEXITSTATUS or -1 if fork or execv fails + * return WEXITSTATUS or -1 if fork fails */ int usign_v(const char *msgfile, const char *pubkeyfile, const char *pubkeydir, const char *sigfile, bool quiet) { @@ -207,7 +188,7 @@ int usign_v(const char *msgfile, const char *pubkeyfile, unsigned int usign_argc = 0; char fingerprint[17]; - if (usign_f_sig(fingerprint, sigfile)) { + if (usign_f_sig(fingerprint, sigfile, quiet)) { if (!quiet) fprintf(stderr, "cannot get signing key fingerprint\n"); return 1; @@ -247,21 +228,12 @@ int usign_v(const char *msgfile, const char *pubkeyfile, return -1; case 0: - if ( -#ifdef UCERT_HOST_BUILD - execvp(usign_argv[0], (char *const *)usign_argv) -#else - execv(usign_argv[0], (char *const *)usign_argv) -#endif - ) - return -1; - - break; - - default: - waitpid(pid, &status, 0); - return WEXITSTATUS(status); + execvp(usign_argv[0], (char *const *)usign_argv); + if (!quiet) + perror("Failed to execute usign"); + _exit(1); } - return -1; + waitpid(pid, &status, 0); + return WEXITSTATUS(status); }