2 #include "run-command.h"
 
   5 #include "argv-array.h"
 
   7 struct child_to_clean {
 
   9         struct child_to_clean *next;
 
  11 static struct child_to_clean *children_to_clean;
 
  12 static int installed_child_cleanup_handler;
 
  14 static void cleanup_children(int sig)
 
  16         while (children_to_clean) {
 
  17                 struct child_to_clean *p = children_to_clean;
 
  18                 children_to_clean = p->next;
 
  24 static void cleanup_children_on_signal(int sig)
 
  26         cleanup_children(sig);
 
  31 static void cleanup_children_on_exit(void)
 
  33         cleanup_children(SIGTERM);
 
  36 static void mark_child_for_cleanup(pid_t pid)
 
  38         struct child_to_clean *p = xmalloc(sizeof(*p));
 
  40         p->next = children_to_clean;
 
  41         children_to_clean = p;
 
  43         if (!installed_child_cleanup_handler) {
 
  44                 atexit(cleanup_children_on_exit);
 
  45                 sigchain_push_common(cleanup_children_on_signal);
 
  46                 installed_child_cleanup_handler = 1;
 
  50 static void clear_child_for_cleanup(pid_t pid)
 
  52         struct child_to_clean **last, *p;
 
  54         last = &children_to_clean;
 
  55         for (p = children_to_clean; p; p = p->next) {
 
  64 static inline void close_pair(int fd[2])
 
  71 static inline void dup_devnull(int to)
 
  73         int fd = open("/dev/null", O_RDWR);
 
  79 static const char **prepare_shell_cmd(const char **argv)
 
  84         for (argc = 0; argv[argc]; argc++)
 
  86         /* +1 for NULL, +3 for "sh -c" plus extra $0 */
 
  87         nargv = xmalloc(sizeof(*nargv) * (argc + 1 + 3));
 
  90                 die("BUG: shell command is empty");
 
  92         if (strcspn(argv[0], "|&;<>()$`\\\"' \t\n*?[#~=%") != strlen(argv[0])) {
 
  93                 nargv[nargc++] = "sh";
 
  94                 nargv[nargc++] = "-c";
 
  97                         nargv[nargc++] = argv[0];
 
  99                         struct strbuf arg0 = STRBUF_INIT;
 
 100                         strbuf_addf(&arg0, "%s \"$@\"", argv[0]);
 
 101                         nargv[nargc++] = strbuf_detach(&arg0, NULL);
 
 105         for (argc = 0; argv[argc]; argc++)
 
 106                 nargv[nargc++] = argv[argc];
 
 113 static int execv_shell_cmd(const char **argv)
 
 115         const char **nargv = prepare_shell_cmd(argv);
 
 116         trace_argv_printf(nargv, "trace: exec:");
 
 117         execvp(nargv[0], (char **)nargv);
 
 124 static int child_err = 2;
 
 125 static int child_notifier = -1;
 
 127 static void notify_parent(void)
 
 130          * execvp failed.  If possible, we'd like to let start_command
 
 131          * know, so failures like ENOENT can be handled right away; but
 
 132          * otherwise, finish_command will still report the error.
 
 134         xwrite(child_notifier, "", 1);
 
 137 static NORETURN void die_child(const char *err, va_list params)
 
 139         vwritef(child_err, "fatal: ", err, params);
 
 143 static void error_child(const char *err, va_list params)
 
 145         vwritef(child_err, "error: ", err, params);
 
 149 static inline void set_cloexec(int fd)
 
 151         int flags = fcntl(fd, F_GETFD);
 
 153                 fcntl(fd, F_SETFD, flags | FD_CLOEXEC);
 
 156 static int wait_or_whine(pid_t pid, const char *argv0, int silent_exec_failure)
 
 158         int status, code = -1;
 
 160         int failed_errno = 0;
 
 162         while ((waiting = waitpid(pid, &status, 0)) < 0 && errno == EINTR)
 
 166                 failed_errno = errno;
 
 167                 error("waitpid for %s failed: %s", argv0, strerror(errno));
 
 168         } else if (waiting != pid) {
 
 169                 error("waitpid is confused (%s)", argv0);
 
 170         } else if (WIFSIGNALED(status)) {
 
 171                 code = WTERMSIG(status);
 
 172                 error("%s died of signal %d", argv0, code);
 
 174                  * This return value is chosen so that code & 0xff
 
 175                  * mimics the exit code that a POSIX shell would report for
 
 176                  * a program that died from this signal.
 
 179         } else if (WIFEXITED(status)) {
 
 180                 code = WEXITSTATUS(status);
 
 182                  * Convert special exit code when execvp failed.
 
 186                         failed_errno = ENOENT;
 
 189                 error("waitpid is confused (%s)", argv0);
 
 192         clear_child_for_cleanup(pid);
 
 194         errno = failed_errno;
 
 198 int start_command(struct child_process *cmd)
 
 200         int need_in, need_out, need_err;
 
 201         int fdin[2], fdout[2], fderr[2];
 
 202         int failed_errno = failed_errno;
 
 205          * In case of errors we must keep the promise to close FDs
 
 206          * that have been passed in via ->in and ->out.
 
 209         need_in = !cmd->no_stdin && cmd->in < 0;
 
 211                 if (pipe(fdin) < 0) {
 
 212                         failed_errno = errno;
 
 220         need_out = !cmd->no_stdout
 
 221                 && !cmd->stdout_to_stderr
 
 224                 if (pipe(fdout) < 0) {
 
 225                         failed_errno = errno;
 
 235         need_err = !cmd->no_stderr && cmd->err < 0;
 
 237                 if (pipe(fderr) < 0) {
 
 238                         failed_errno = errno;
 
 248                         error("cannot create pipe for %s: %s",
 
 249                                 cmd->argv[0], strerror(failed_errno));
 
 250                         errno = failed_errno;
 
 256         trace_argv_printf(cmd->argv, "trace: run_command:");
 
 262         if (pipe(notify_pipe))
 
 263                 notify_pipe[0] = notify_pipe[1] = -1;
 
 268                  * Redirect the channel to write syscall error messages to
 
 269                  * before redirecting the process's stderr so that all die()
 
 270                  * in subsequent call paths use the parent's stderr.
 
 272                 if (cmd->no_stderr || need_err) {
 
 274                         set_cloexec(child_err);
 
 276                 set_die_routine(die_child);
 
 277                 set_error_routine(error_child);
 
 279                 close(notify_pipe[0]);
 
 280                 set_cloexec(notify_pipe[1]);
 
 281                 child_notifier = notify_pipe[1];
 
 282                 atexit(notify_parent);
 
 289                 } else if (cmd->in) {
 
 299                 } else if (cmd->err > 1) {
 
 306                 else if (cmd->stdout_to_stderr)
 
 311                 } else if (cmd->out > 1) {
 
 316                 if (cmd->dir && chdir(cmd->dir))
 
 317                         die_errno("exec '%s': cd to '%s' failed", cmd->argv[0],
 
 320                         for (; *cmd->env; cmd->env++) {
 
 321                                 if (strchr(*cmd->env, '='))
 
 322                                         putenv((char *)*cmd->env);
 
 327                 if (cmd->preexec_cb) {
 
 329                          * We cannot predict what the pre-exec callback does.
 
 330                          * Forgo parent notification.
 
 332                         close(child_notifier);
 
 338                         execv_git_cmd(cmd->argv);
 
 339                 } else if (cmd->use_shell) {
 
 340                         execv_shell_cmd(cmd->argv);
 
 342                         execvp(cmd->argv[0], (char *const*) cmd->argv);
 
 344                 if (errno == ENOENT) {
 
 345                         if (!cmd->silent_exec_failure)
 
 346                                 error("cannot run %s: %s", cmd->argv[0],
 
 350                         die_errno("cannot exec '%s'", cmd->argv[0]);
 
 354                 error("cannot fork() for %s: %s", cmd->argv[0],
 
 355                         strerror(failed_errno = errno));
 
 356         else if (cmd->clean_on_exit)
 
 357                 mark_child_for_cleanup(cmd->pid);
 
 360          * Wait for child's execvp. If the execvp succeeds (or if fork()
 
 361          * failed), EOF is seen immediately by the parent. Otherwise, the
 
 362          * child process sends a single byte.
 
 363          * Note that use of this infrastructure is completely advisory,
 
 364          * therefore, we keep error checks minimal.
 
 366         close(notify_pipe[1]);
 
 367         if (read(notify_pipe[0], ¬ify_pipe[1], 1) == 1) {
 
 369                  * At this point we know that fork() succeeded, but execvp()
 
 370                  * failed. Errors have been reported to our stderr.
 
 372                 wait_or_whine(cmd->pid, cmd->argv[0],
 
 373                               cmd->silent_exec_failure);
 
 374                 failed_errno = errno;
 
 377         close(notify_pipe[0]);
 
 382         int fhin = 0, fhout = 1, fherr = 2;
 
 383         const char **sargv = cmd->argv;
 
 384         char **env = environ;
 
 387                 fhin = open("/dev/null", O_RDWR);
 
 394                 fherr = open("/dev/null", O_RDWR);
 
 396                 fherr = dup(fderr[1]);
 
 397         else if (cmd->err > 2)
 
 398                 fherr = dup(cmd->err);
 
 401                 fhout = open("/dev/null", O_RDWR);
 
 402         else if (cmd->stdout_to_stderr)
 
 405                 fhout = dup(fdout[1]);
 
 406         else if (cmd->out > 1)
 
 407                 fhout = dup(cmd->out);
 
 410                 env = make_augmented_environ(cmd->env);
 
 413                 cmd->argv = prepare_git_cmd(cmd->argv);
 
 414         } else if (cmd->use_shell) {
 
 415                 cmd->argv = prepare_shell_cmd(cmd->argv);
 
 418         cmd->pid = mingw_spawnvpe(cmd->argv[0], cmd->argv, env, cmd->dir,
 
 420         failed_errno = errno;
 
 421         if (cmd->pid < 0 && (!cmd->silent_exec_failure || errno != ENOENT))
 
 422                 error("cannot spawn %s: %s", cmd->argv[0], strerror(errno));
 
 423         if (cmd->clean_on_exit && cmd->pid >= 0)
 
 424                 mark_child_for_cleanup(cmd->pid);
 
 454                 errno = failed_errno;
 
 476 int finish_command(struct child_process *cmd)
 
 478         return wait_or_whine(cmd->pid, cmd->argv[0], cmd->silent_exec_failure);
 
 481 int run_command(struct child_process *cmd)
 
 483         int code = start_command(cmd);
 
 486         return finish_command(cmd);
 
 489 static void prepare_run_command_v_opt(struct child_process *cmd,
 
 493         memset(cmd, 0, sizeof(*cmd));
 
 495         cmd->no_stdin = opt & RUN_COMMAND_NO_STDIN ? 1 : 0;
 
 496         cmd->git_cmd = opt & RUN_GIT_CMD ? 1 : 0;
 
 497         cmd->stdout_to_stderr = opt & RUN_COMMAND_STDOUT_TO_STDERR ? 1 : 0;
 
 498         cmd->silent_exec_failure = opt & RUN_SILENT_EXEC_FAILURE ? 1 : 0;
 
 499         cmd->use_shell = opt & RUN_USING_SHELL ? 1 : 0;
 
 500         cmd->clean_on_exit = opt & RUN_CLEAN_ON_EXIT ? 1 : 0;
 
 503 int run_command_v_opt(const char **argv, int opt)
 
 505         struct child_process cmd;
 
 506         prepare_run_command_v_opt(&cmd, argv, opt);
 
 507         return run_command(&cmd);
 
 510 int run_command_v_opt_cd_env(const char **argv, int opt, const char *dir, const char *const *env)
 
 512         struct child_process cmd;
 
 513         prepare_run_command_v_opt(&cmd, argv, opt);
 
 516         return run_command(&cmd);
 
 520 static pthread_t main_thread;
 
 521 static int main_thread_set;
 
 522 static pthread_key_t async_key;
 
 524 static void *run_thread(void *data)
 
 526         struct async *async = data;
 
 529         pthread_setspecific(async_key, async);
 
 530         ret = async->proc(async->proc_in, async->proc_out, async->data);
 
 534 static NORETURN void die_async(const char *err, va_list params)
 
 536         vreportf("fatal: ", err, params);
 
 538         if (!pthread_equal(main_thread, pthread_self())) {
 
 539                 struct async *async = pthread_getspecific(async_key);
 
 540                 if (async->proc_in >= 0)
 
 541                         close(async->proc_in);
 
 542                 if (async->proc_out >= 0)
 
 543                         close(async->proc_out);
 
 544                 pthread_exit((void *)128);
 
 551 int start_async(struct async *async)
 
 553         int need_in, need_out;
 
 554         int fdin[2], fdout[2];
 
 555         int proc_in, proc_out;
 
 557         need_in = async->in < 0;
 
 559                 if (pipe(fdin) < 0) {
 
 562                         return error("cannot create pipe: %s", strerror(errno));
 
 567         need_out = async->out < 0;
 
 569                 if (pipe(fdout) < 0) {
 
 574                         return error("cannot create pipe: %s", strerror(errno));
 
 576                 async->out = fdout[0];
 
 589                 proc_out = async->out;
 
 594         /* Flush stdio before fork() to avoid cloning buffers */
 
 598         if (async->pid < 0) {
 
 599                 error("fork (async) failed: %s", strerror(errno));
 
 607                 exit(!!async->proc(proc_in, proc_out, async->data));
 
 610         mark_child_for_cleanup(async->pid);
 
 622         if (!main_thread_set) {
 
 624                  * We assume that the first time that start_async is called
 
 625                  * it is from the main thread.
 
 628                 main_thread = pthread_self();
 
 629                 pthread_key_create(&async_key, NULL);
 
 630                 set_die_routine(die_async);
 
 634                 set_cloexec(proc_in);
 
 636                 set_cloexec(proc_out);
 
 637         async->proc_in = proc_in;
 
 638         async->proc_out = proc_out;
 
 640                 int err = pthread_create(&async->tid, NULL, run_thread, async);
 
 642                         error("cannot create thread: %s", strerror(err));
 
 662 int finish_async(struct async *async)
 
 665         return wait_or_whine(async->pid, "child process", 0);
 
 667         void *ret = (void *)(intptr_t)(-1);
 
 669         if (pthread_join(async->tid, &ret))
 
 670                 error("pthread_join failed");
 
 671         return (int)(intptr_t)ret;
 
 675 int run_hook(const char *index_file, const char *name, ...)
 
 677         struct child_process hook;
 
 678         struct argv_array argv = ARGV_ARRAY_INIT;
 
 679         const char *p, *env[2];
 
 680         char index[PATH_MAX];
 
 684         if (access(git_path("hooks/%s", name), X_OK) < 0)
 
 687         va_start(args, name);
 
 688         argv_array_push(&argv, git_path("hooks/%s", name));
 
 689         while ((p = va_arg(args, const char *)))
 
 690                 argv_array_push(&argv, p);
 
 693         memset(&hook, 0, sizeof(hook));
 
 694         hook.argv = argv.argv;
 
 696         hook.stdout_to_stderr = 1;
 
 698                 snprintf(index, sizeof(index), "GIT_INDEX_FILE=%s", index_file);
 
 704         ret = run_command(&hook);
 
 705         argv_array_clear(&argv);