Lines Matching refs:cmd

49 static void setstate_stopped(command_t *cmd, struct timespec *ts);
50 static int setup_gid(command_t *cmd);
51 static int setup_uid(command_t *cmd);
52 static int setup_jail(command_t *cmd);
53 static int setup_chroot(command_t *cmd);
54 static int setup_devfs(command_t *cmd, const char *dir, int domount);
58 execute_init(command_t *cmd) in execute_init() argument
72 if (cmd->label == NULL || cmd->ext_ac == 0) { in execute_init()
73 fprintf(cmd->fp, "init requires a label and command\n"); in execute_init()
76 fprintf(cmd->fp, "initializing new service: %s\n", cmd->label); in execute_init()
79 fprintf(cmd->fp, "Unable to open /dev/null: %s\n", in execute_init()
88 rc = setup_pid_and_socket(cmd, &lfd, &pfd); in execute_init()
95 if (cmd->foreground) { in execute_init()
104 fprintf(cmd->fp, "Unable to create pipe: %s\n", in execute_init()
108 remove_pid_and_socket(cmd, cmd->label); in execute_init()
120 fprintf(cmd->fp, "fork failed: %s\n", strerror(errno)); in execute_init()
125 remove_pid_and_socket(cmd, cmd->label); in execute_init()
152 if (cmd->proctitle) { in execute_init()
153 setproctitle("%s - %s", cmd->label, cmd->proctitle); in execute_init()
155 setproctitle("%s", cmd->label); in execute_init()
157 if (cmd->mountdev) { in execute_init()
158 if (cmd->jaildir) in execute_init()
159 setup_devfs(cmd, cmd->jaildir, 1); in execute_init()
160 else if (cmd->rootdir) in execute_init()
161 setup_devfs(cmd, cmd->rootdir, 1); in execute_init()
164 if (cmd->foreground == 0) { in execute_init()
171 if (cmd->foreground == 0) { in execute_init()
189 if (cmd->logfile && strcmp(cmd->logfile, "/dev/null") == 0) in execute_init()
190 cmd->logfd = -1; in execute_init()
191 else if (cmd->logfile) in execute_init()
192 cmd->logfd = open(cmd->logfile, O_WRONLY|O_CREAT|O_APPEND, 0640); in execute_init()
193 else if (cmd->foreground) in execute_init()
194 cmd->logfd = dup(1); in execute_init()
196 cmd->logfd = -1; in execute_init()
202 if (cmd->foreground == 0) { in execute_init()
207 InitCmd = cmd; in execute_init()
213 pipe(cmd->logfds); in execute_init()
214 if (cmd->fp != stdout) in execute_init()
215 fclose(cmd->fp); in execute_init()
216 cmd->fp = fdopen(cmd->logfds[1], "w"); in execute_init()
223 pthread_cond_init(&cmd->logcond, NULL); in execute_init()
229 pthread_create(&logtd, NULL, logger_thread, cmd); in execute_init()
230 remote_listener(cmd, lfd); in execute_init()
236 fprintf(cmd->fp, "svc is unable to become the " in execute_init()
238 fflush(cmd->fp); in execute_init()
244 execute_start(cmd); in execute_init()
261 fflush(cmd->fp); in execute_init()
273 fprintf(cmd->fp, in execute_init()
275 cmd->label, pid); in execute_init()
276 fflush(cmd->fp); in execute_init()
278 if (cmd->restart_some) { in execute_init()
279 setstate_stopped(cmd, &ts); in execute_init()
281 } else if (cmd->debug) { in execute_init()
287 fprintf(cmd->fp, in execute_init()
289 cmd->label, in execute_init()
306 if (cmd->debug) { in execute_init()
308 cmd->label, usepid); in execute_init()
317 setstate_stopped(cmd, &ts); in execute_init()
331 setstate_stopped(cmd, &ts); in execute_init()
336 if (cmd->exit_mode) { in execute_init()
341 fprintf(cmd->fp, in execute_init()
343 cmd->label); in execute_init()
344 remove_pid_and_socket(cmd, cmd->label); in execute_init()
346 } else if (cmd->manual_stop) { in execute_init()
359 } else if (cmd->restart_some || cmd->restart_all) { in execute_init()
363 if (dt > cmd->restart_timo) { in execute_init()
364 execute_start(cmd); in execute_init()
391 if (cmd->termkill_timo == 0) { in execute_init()
395 fprintf(cmd->fp, "svc %s: sigterm %d\n", in execute_init()
396 cmd->label, stoppingpid); in execute_init()
403 if (dt > cmd->termkill_timo) { in execute_init()
404 fprintf(cmd->fp, "svc %s: sigkill %d\n", in execute_init()
405 cmd->label, stoppingpid); in execute_init()
414 if (cmd->mountdev) { in execute_init()
415 if (cmd->jaildir) in execute_init()
416 setup_devfs(cmd, cmd->jaildir, 0); in execute_init()
417 else if (cmd->rootdir) in execute_init()
418 setup_devfs(cmd, cmd->rootdir, 0); in execute_init()
425 execute_start(command_t *cmd) in execute_start() argument
433 fprintf(cmd->fp, in execute_start()
435 cmd->label); in execute_start()
436 fflush(cmd->fp); in execute_start()
441 fprintf(cmd->fp, in execute_start()
443 cmd->label); in execute_start()
444 fflush(cmd->fp); in execute_start()
449 fprintf(cmd->fp, "svc %s: Already started pid %d\n", in execute_start()
450 cmd->label, DirectPid); in execute_start()
451 fflush(cmd->fp); in execute_start()
463 if (cmd->jaildir) /* jail or chroot */ in execute_start()
464 setup_jail(cmd); in execute_start()
465 else if (cmd->rootdir) in execute_start()
466 setup_chroot(cmd); in execute_start()
468 setup_gid(cmd); in execute_start()
469 setup_uid(cmd); in execute_start()
480 fprintf(cmd->fp, "svc %s: Starting pid %d\n", cmd->label, DirectPid); in execute_start()
481 fflush(cmd->fp); in execute_start()
487 execute_restart(command_t *cmd) in execute_restart() argument
491 rc = execute_stop(cmd) + execute_start(cmd); in execute_restart()
496 execute_stop(command_t *cmd) in execute_stop() argument
506 if (cmd->commanded) in execute_stop()
508 if (cmd->commanded && (cmd->restart_some || cmd->restart_all)) { in execute_stop()
509 InitCmd->restart_some = cmd->restart_some; in execute_stop()
510 InitCmd->restart_all = cmd->restart_all; in execute_stop()
512 fprintf(cmd->fp, "svc %s: Stopping\n", cmd->label); in execute_stop()
513 fflush(cmd->fp); in execute_stop()
535 if (cmd->commanded) { in execute_stop()
539 fprintf(cmd->fp, in execute_stop()
541 cmd->label); in execute_stop()
542 fflush(cmd->fp); in execute_stop()
547 fprintf(cmd->fp, in execute_stop()
549 cmd->label); in execute_stop()
550 fflush(cmd->fp); in execute_stop()
554 if (cmd->restart_some || cmd->restart_all) { in execute_stop()
564 execute_exit(command_t *cmd) in execute_exit() argument
566 if (cmd->commanded) { in execute_exit()
571 cmd->exit_mode = 1; in execute_exit()
573 fprintf(cmd->fp, "svc %s: Stopping and Exiting\n", cmd->label); in execute_exit()
574 execute_stop(cmd); in execute_exit()
580 execute_list(command_t *cmd) in execute_list() argument
582 fprintf(cmd->fp, "%-16s\n", cmd->label); in execute_list()
588 execute_status(command_t *cmd) in execute_status() argument
614 fprintf(cmd->fp, "%-16s %s\n", cmd->label, state); in execute_status()
620 execute_log(command_t *cmd) in execute_log() argument
622 int lbsize = (int)sizeof(cmd->logbuf); in execute_log()
637 if (cmd->tail_mode == 2) in execute_log()
653 fprintf(cmd->fp, "\n(LOG DATA LOST)\n"); in execute_log()
667 if (cmd->tail_mode == 0) in execute_log()
678 n = escapewrite(cmd->fp, buf, n, &dotstate); in execute_log()
679 fflush(cmd->fp); in execute_log()
690 fprintf(cmd->fp, "\n"); in execute_log()
700 execute_logfile(command_t *cmd) in execute_logfile() argument
708 logfile = cmd->logfile; in execute_logfile()
709 if (cmd->ext_av && cmd->ext_av[0]) in execute_logfile()
710 logfile = cmd->ext_av[0]; in execute_logfile()
718 fprintf(cmd->fp, "svc %s: Reopen logfile %s\n", in execute_logfile()
719 cmd->label, logfile); in execute_logfile()
721 fprintf(cmd->fp, "svc %s: Change logfile to %s\n", in execute_logfile()
722 cmd->label, logfile); in execute_logfile()
736 fprintf(cmd->fp, in execute_logfile()
739 cmd->label, in execute_logfile()
749 execute_help(command_t *cmd) in execute_help() argument
751 fprintf(cmd->fp, in execute_help()
765 command_t *cmd = arg; in logger_thread() local
766 int lbsize = (int)sizeof(cmd->logbuf); in logger_thread()
777 n = cmd->logcount - (lbsize - LOGCHUNK); in logger_thread()
779 cmd->logcount -= n; in logger_thread()
780 cmd->logwindex += n; in logger_thread()
782 windex = cmd->logwindex & lbmask; in logger_thread()
787 n = read(cmd->logfds[0], cmd->logbuf + windex, n); in logger_thread()
790 if (cmd->logfd >= 0) in logger_thread()
791 write(cmd->logfd, cmd->logbuf + windex, n); in logger_thread()
792 cmd->logcount += n; in logger_thread()
793 cmd->logwindex += n; in logger_thread()
794 pthread_cond_signal(&cmd->logcond); in logger_thread()
809 setstate_stopped(command_t *cmd, struct timespec *ts) in setstate_stopped() argument
814 if (cmd->sync_mode) /* support -s option */ in setstate_stopped()
821 setup_gid(command_t *cmd) in setup_gid() argument
825 if (cmd->gid_mode && in setup_gid()
826 setgid(cmd->grent.gr_gid) < 0) { in setup_gid()
827 fprintf(cmd->fp, "unable to setgid to \"%s\": %s\n", in setup_gid()
828 cmd->grent.gr_name, strerror(errno)); in setup_gid()
835 if (cmd->ngroups) { in setup_gid()
836 if (setgroups(cmd->ngroups, cmd->groups) < 0) { in setup_gid()
837 fprintf(cmd->fp, "unable to setgroups to ("); in setup_gid()
838 for (i = 0; i < cmd->ngroups; ++i) { in setup_gid()
840 fprintf(cmd->fp, ", "); in setup_gid()
841 fprintf(cmd->fp, "%d", cmd->groups[i]); in setup_gid()
843 fprintf(cmd->fp, "): %s\n", strerror(errno)); in setup_gid()
852 setup_uid(command_t *cmd) in setup_uid() argument
854 fprintf(stderr, "UIDMODE %d %d\n", cmd->uid_mode, cmd->pwent.pw_uid); in setup_uid()
855 if (cmd->uid_mode && in setup_uid()
856 cmd->gid_mode == 0 && in setup_uid()
857 cmd->ngroups == 0 && in setup_uid()
858 setgid(cmd->pwent.pw_gid) < 0) { in setup_uid()
859 fprintf(cmd->fp, "unable to setgid for user \"%s\": %s\n", in setup_uid()
860 cmd->pwent.pw_name, in setup_uid()
864 if (cmd->uid_mode && in setup_uid()
865 setuid(cmd->pwent.pw_uid) < 0) { in setup_uid()
866 fprintf(cmd->fp, "unable to setuid for user \"%s\": %s\n", in setup_uid()
867 cmd->pwent.pw_name, in setup_uid()
876 setup_jail(command_t *cmd) in setup_jail() argument
882 fprintf(cmd->fp, "gethostname() failed: %s\n", strerror(errno)); in setup_jail()
890 info.path = cmd->jaildir; in setup_jail()
895 fprintf(cmd->fp, "unable to create jail \"%s\": %s\n", in setup_jail()
896 cmd->rootdir, in setup_jail()
905 setup_chroot(command_t *cmd) in setup_chroot() argument
907 if (chroot(cmd->rootdir) < 0) { in setup_chroot()
908 fprintf(cmd->fp, "unable to chroot to \"%s\": %s\n", in setup_chroot()
909 cmd->rootdir, in setup_chroot()
918 setup_devfs(command_t *cmd, const char *dir, int domount) in setup_devfs() argument
932 fprintf(cmd->fp, "devfs already mounted\n"); in setup_devfs()
935 fprintf(cmd->fp, "cannot mount devfs on %s: %s\n", in setup_devfs()
942 fprintf(cmd->fp, "devfs already unmounted\n"); in setup_devfs()
945 fprintf(cmd->fp, "cannot unmount devfs from %s: %s\n", in setup_devfs()