From: Daniel Kahn Gillmor Date: Fri, 11 Apr 2008 17:20:55 +0000 (-0400) Subject: Merge commit 'jrollins/master' X-Git-Tag: monkeysphere_0.1-1~79 X-Git-Url: https://codewiz.org/gitweb?a=commitdiff_plain;h=a4c93ce43a942be7f92248cb1ef3a1d3313bce5e;hp=280c55fa03828f4b27a9b14f6c597bdc3741570d;p=monkeysphere.git Merge commit 'jrollins/master' --- diff --git a/gnutls-helpers.c b/gnutls-helpers.c index 50b6114..5a567e2 100644 --- a/gnutls-helpers.c +++ b/gnutls-helpers.c @@ -20,6 +20,7 @@ void err(const char* fmt, ...) { va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); + fflush(stderr); } void logfunc(int level, const char* string) { @@ -286,6 +287,10 @@ int create_writing_pipe(pid_t* pid, const char* path, char* const argv[]) { } execv(path, argv); err("exec %s failed (error: %d \"%s\")\n", path, errno, strerror(errno)); + /* close the open file descriptors */ + close(p[0]); + close(0); + exit(1); } else { /* this is the parent */ close(p[0]); /* close unused read end */ diff --git a/gpg2ssh.c b/gpg2ssh.c index f696f65..6155549 100644 --- a/gpg2ssh.c +++ b/gpg2ssh.c @@ -48,6 +48,7 @@ int main(int argc, char* argv[]) { char* const args[] = {"/usr/bin/base64", "--wrap=0", NULL}; const char* algoname; int mpicount; + int pipestatus; init_gnutls(); @@ -258,23 +259,27 @@ int main(int argc, char* argv[]) { snprintf(output_data, sizeof(output_data), "%s %s ", userid, algoname); - write(1, output_data, strlen(output_data)); - pipefd = create_writing_pipe(&child_pid, args[0], args); if (pipefd < 0) { err("failed to create a writing pipe (returned %d)\n", pipefd); return pipefd; } + write(1, output_data, strlen(output_data)); + if (0 != write_data_fd_with_length(pipefd, all, mpicount)) { err("was not able to write out RSA key data\n"); return 1; } close(pipefd); - if (child_pid != waitpid(child_pid, NULL, 0)) { + if (child_pid != waitpid(child_pid, &pipestatus, 0)) { err("could not wait for child process to return for some reason.\n"); return 1; } + if (pipestatus != 0) { + err("base64 pipe died with return code %d\n", pipestatus); + return pipestatus; + } write(1, "\n", 1);