projects
/
oweals
/
ucert.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
cast ucert_argv to proper type when passing to execv
[oweals/ucert.git]
/
usign-exec.c
diff --git
a/usign-exec.c
b/usign-exec.c
index 70319fa5809ee436511bfb14296ea1e7c0009146..85e5f956ee1f0627ad10ca87f2236d3411393108 100644
(file)
--- a/
usign-exec.c
+++ b/
usign-exec.c
@@
-20,6
+20,12
@@
#include "usign.h"
#include "usign.h"
+#ifdef UCERT_HOST_BUILD
+#define USIGN_EXEC "usign"
+#else
+#define USIGN_EXEC "/usr/bin/usign"
+#endif
+
/*
* check for revoker deadlink in pubkeydir
* return true if a revoker exists, false otherwise
/*
* check for revoker deadlink in pubkeydir
* return true if a revoker exists, false otherwise
@@
-48,7
+54,7
@@
int usign_s(const char *msgfile, const char *seckeyfile, const char *sigfile, bo
const char *usign_argv[16] = {0};
unsigned int usign_argc = 0;
const char *usign_argv[16] = {0};
unsigned int usign_argc = 0;
- usign_argv[usign_argc++] =
"/usr/bin/usign"
;
+ usign_argv[usign_argc++] =
USIGN_EXEC
;
usign_argv[usign_argc++] = "-S";
usign_argv[usign_argc++] = "-m";
usign_argv[usign_argc++] = msgfile;
usign_argv[usign_argc++] = "-S";
usign_argv[usign_argc++] = "-m";
usign_argv[usign_argc++] = msgfile;
@@
-66,7
+72,13
@@
int usign_s(const char *msgfile, const char *seckeyfile, const char *sigfile, bo
return -1;
case 0:
return -1;
case 0:
- if (execv(usign_argv[0], usign_argv))
+ 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;
return -1;
break;
@@
-98,7
+110,7
@@
static int usign_f(char *fingerprint, const char *pubkeyfile, const char *seckey
if (pipe(fds))
return -1;
if (pipe(fds))
return -1;
- usign_argv[usign_argc++] =
"/usr/bin/usign"
;
+ usign_argv[usign_argc++] =
USIGN_EXEC
;
usign_argv[usign_argc++] = "-F";
if (pubkeyfile) {
usign_argv[usign_argc++] = "-F";
if (pubkeyfile) {
@@
-129,21
+141,33
@@
static int usign_f(char *fingerprint, const char *pubkeyfile, const char *seckey
close(fds[0]);
close(fds[1]);
close(fds[0]);
close(fds[1]);
- if (execv(usign_argv[0], usign_argv))
+ 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 -1;
break;
default:
waitpid(pid, &status, 0);
+ status = WEXITSTATUS(status);
if (fingerprint && !WEXITSTATUS(status)) {
if (fingerprint && !WEXITSTATUS(status)) {
- memset(fingerprint, 0, 16);
- read(fds[0], fingerprint, 16);
+ 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]);
}
close(fds[0]);
close(fds[1]);
- return
WEXITSTATUS(status)
;
+ return
status
;
}
return -1;
}
return -1;
@@
-194,7
+218,7
@@
int usign_v(const char *msgfile, const char *pubkeyfile,
fprintf(stdout, "key %s has been revoked!\n", fingerprint);
return 1;
}
fprintf(stdout, "key %s has been revoked!\n", fingerprint);
return 1;
}
- usign_argv[usign_argc++] =
"/usr/bin/usign"
;
+ usign_argv[usign_argc++] =
USIGN_EXEC
;
usign_argv[usign_argc++] = "-V";
usign_argv[usign_argc++] = "-m";
usign_argv[usign_argc++] = msgfile;
usign_argv[usign_argc++] = "-V";
usign_argv[usign_argc++] = "-m";
usign_argv[usign_argc++] = msgfile;
@@
-223,7
+247,13
@@
int usign_v(const char *msgfile, const char *pubkeyfile,
return -1;
case 0:
return -1;
case 0:
- if (execv(usign_argv[0], usign_argv))
+ 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;
return -1;
break;