Lines Matching refs:ps
70 proc_exec(struct privsep *ps, struct privsep_proc *procs, unsigned int nproc, in proc_exec() argument
108 for (i = 0; i < ps->ps_instances[p->p_id]; i++) { in proc_exec()
112 fd = ps->ps_pipes[p->p_id][i].pp_pipes[PROC_PARENT][0]; in proc_exec()
113 ps->ps_pipes[p->p_id][i].pp_pipes[PROC_PARENT][0] = -1; in proc_exec()
142 proc_connect(struct privsep *ps) in proc_connect() argument
148 if (ps->ps_noaction) in proc_connect()
156 for (inst = 0; inst < ps->ps_instances[dst]; inst++) { in proc_connect()
157 iev = &ps->ps_ievs[dst][inst]; in proc_connect()
159 ps->ps_pp->pp_pipes[dst][inst]) == -1) in proc_connect()
175 proc_open(ps, src, dst); in proc_connect()
180 proc_init(struct privsep *ps, struct privsep_proc *procs, unsigned int nproc, in proc_init() argument
190 if (ps->ps_noaction) in proc_init()
195 proc_setup(ps, procs, nproc); in proc_init()
210 for (proc = 0; proc < ps->ps_instances[dst]; proc++) { in proc_init()
211 pa = &ps->ps_pipes[PROC_PARENT][0]; in proc_init()
212 pb = &ps->ps_pipes[dst][proc]; in proc_init()
224 proc_exec(ps, procs, nproc, argc, argv); in proc_init()
239 p->p_init(ps, p); in proc_init()
245 proc_accept(struct privsep *ps, int fd, enum privsep_procid dst, in proc_accept() argument
248 struct privsep_pipes *pp = ps->ps_pp; in proc_accept()
251 if (ps->ps_ievs[dst] == NULL) { in proc_accept()
254 __func__, ps->ps_title[privsep_process], in proc_accept()
255 privsep_process, ps->ps_instance + 1, in proc_accept()
269 iev = &ps->ps_ievs[dst][n]; in proc_accept()
278 proc_setup(struct privsep *ps, struct privsep_proc *procs, unsigned int nproc) in proc_setup() argument
284 ps->ps_title[PROC_PARENT] = "parent"; in proc_setup()
288 if (ps->ps_instances[src] < 1) in proc_setup()
289 ps->ps_instances[src] = 1; in proc_setup()
292 procs[src].p_ps = ps; in proc_setup()
297 ps->ps_title[id] = procs[src].p_title; in proc_setup()
298 if ((ps->ps_ievs[id] = calloc(ps->ps_instances[id], in proc_setup()
303 for (i = 0; i < ps->ps_instances[id]; i++) { in proc_setup()
304 ps->ps_ievs[id][i].handler = proc_dispatch; in proc_setup()
305 ps->ps_ievs[id][i].events = EV_READ; in proc_setup()
306 ps->ps_ievs[id][i].proc = &procs[src]; in proc_setup()
307 ps->ps_ievs[id][i].data = &ps->ps_ievs[id][i]; in proc_setup()
326 if ((ps->ps_pipes[src] = calloc(ps->ps_instances[src], in proc_setup()
330 for (i = 0; i < ps->ps_instances[src]; i++) { in proc_setup()
331 pp = &ps->ps_pipes[src][i]; in proc_setup()
336 calloc(ps->ps_instances[dst], in proc_setup()
341 for (j = 0; j < ps->ps_instances[dst]; j++) in proc_setup()
347 ps->ps_pp = &ps->ps_pipes[privsep_process][ps->ps_instance]; in proc_setup()
351 proc_kill(struct privsep *ps) in proc_kill() argument
360 proc_close(ps); in proc_kill()
389 proc_open(struct privsep *ps, int src, int dst) in proc_open() argument
397 for (i = 0; i < ps->ps_instances[src]; i++) { in proc_open()
398 for (j = 0; j < ps->ps_instances[dst]; j++) { in proc_open()
403 pa = &ps->ps_pipes[src][i]; in proc_open()
404 pb = &ps->ps_pipes[dst][j]; in proc_open()
415 if (proc_compose_imsg(ps, dst, j, IMSG_CTL_PROCFD, in proc_open()
421 if (proc_compose_imsg(ps, src, i, IMSG_CTL_PROCFD, in proc_open()
429 if (proc_flush_imsg(ps, src, i) == -1 || in proc_open()
430 proc_flush_imsg(ps, dst, j) == -1) in proc_open()
437 proc_close(struct privsep *ps) in proc_close() argument
442 if (ps == NULL) in proc_close()
445 pp = ps->ps_pp; in proc_close()
448 if (ps->ps_ievs[dst] == NULL) in proc_close()
451 for (n = 0; n < ps->ps_instances[dst]; n++) { in proc_close()
456 event_del(&(ps->ps_ievs[dst][n].ev)); in proc_close()
457 imsgbuf_clear(&(ps->ps_ievs[dst][n].ibuf)); in proc_close()
461 free(ps->ps_ievs[dst]); in proc_close()
468 struct privsep *ps = p->p_ps; in proc_shutdown() local
473 proc_close(ps); in proc_shutdown()
503 proc_run(struct privsep *ps, struct privsep_proc *p, in proc_run() argument
516 pw = ps->ps_pw; in proc_run()
540 signal_set(&ps->ps_evsigint, SIGINT, proc_sig_handler, p); in proc_run()
541 signal_set(&ps->ps_evsigterm, SIGTERM, proc_sig_handler, p); in proc_run()
542 signal_set(&ps->ps_evsigchld, SIGCHLD, proc_sig_handler, p); in proc_run()
543 signal_set(&ps->ps_evsighup, SIGHUP, proc_sig_handler, p); in proc_run()
544 signal_set(&ps->ps_evsigpipe, SIGPIPE, proc_sig_handler, p); in proc_run()
545 signal_set(&ps->ps_evsigusr1, SIGUSR1, proc_sig_handler, p); in proc_run()
547 signal_add(&ps->ps_evsigint, NULL); in proc_run()
548 signal_add(&ps->ps_evsigterm, NULL); in proc_run()
549 signal_add(&ps->ps_evsigchld, NULL); in proc_run()
550 signal_add(&ps->ps_evsighup, NULL); in proc_run()
551 signal_add(&ps->ps_evsigpipe, NULL); in proc_run()
552 signal_add(&ps->ps_evsigusr1, NULL); in proc_run()
554 proc_setup(ps, procs, nproc); in proc_run()
555 proc_accept(ps, PROC_PARENT_SOCK_FILENO, PROC_PARENT, 0); in proc_run()
557 ps->ps_instance + 1, ps->ps_instances[p->p_id], getpid()); in proc_run()
560 run(ps, p, arg); in proc_run()
572 struct privsep *ps = p->p_ps; in proc_dispatch() local
580 title = ps->ps_title[privsep_process]; in proc_dispatch()
614 __func__, title, ps->ps_instance + 1, in proc_dispatch()
639 proc_accept(ps, imsg_get_fd(&imsg), pf.pf_procid, in proc_dispatch()
645 __func__, title, ps->ps_instance + 1, in proc_dispatch()
708 proc_range(struct privsep *ps, enum privsep_procid id, int *n, int *m) in proc_range() argument
713 *m = ps->ps_instances[id]; in proc_range()
721 proc_compose_imsg(struct privsep *ps, enum privsep_procid id, int n, in proc_compose_imsg() argument
726 proc_range(ps, id, &n, &m); in proc_compose_imsg()
728 if (imsg_compose_event(&ps->ps_ievs[id][n], in proc_compose_imsg()
729 type, peerid, ps->ps_instance + 1, fd, data, datalen) == -1) in proc_compose_imsg()
737 proc_compose(struct privsep *ps, enum privsep_procid id, in proc_compose() argument
740 return (proc_compose_imsg(ps, id, -1, type, -1, -1, data, datalen)); in proc_compose()
744 proc_composev_imsg(struct privsep *ps, enum privsep_procid id, int n, in proc_composev_imsg() argument
749 proc_range(ps, id, &n, &m); in proc_composev_imsg()
751 if (imsg_composev_event(&ps->ps_ievs[id][n], in proc_composev_imsg()
752 type, peerid, ps->ps_instance + 1, fd, iov, iovcnt) == -1) in proc_composev_imsg()
759 proc_composev(struct privsep *ps, enum privsep_procid id, in proc_composev() argument
762 return (proc_composev_imsg(ps, id, -1, type, -1, -1, iov, iovcnt)); in proc_composev()
766 proc_ibuf(struct privsep *ps, enum privsep_procid id, int n) in proc_ibuf() argument
770 proc_range(ps, id, &n, &m); in proc_ibuf()
771 return (&ps->ps_ievs[id][n].ibuf); in proc_ibuf()
775 proc_iev(struct privsep *ps, enum privsep_procid id, int n) in proc_iev() argument
779 proc_range(ps, id, &n, &m); in proc_iev()
780 return (&ps->ps_ievs[id][n]); in proc_iev()
785 proc_flush_imsg(struct privsep *ps, enum privsep_procid id, int n) in proc_flush_imsg() argument
790 proc_range(ps, id, &n, &m); in proc_flush_imsg()
792 if ((ibuf = proc_ibuf(ps, id, n)) == NULL) in proc_flush_imsg()
796 imsg_event_add(&ps->ps_ievs[id][n]); in proc_flush_imsg()