Lines Matching defs:ps

70 proc_exec(struct privsep *ps, struct privsep_proc *procs, unsigned int nproc,
108 for (i = 0; i < ps->ps_instances[p->p_id]; i++) {
112 fd = ps->ps_pipes[p->p_id][i].pp_pipes[PROC_PARENT][0];
113 ps->ps_pipes[p->p_id][i].pp_pipes[PROC_PARENT][0] = -1;
142 proc_connect(struct privsep *ps)
148 if (ps->ps_noaction)
156 for (inst = 0; inst < ps->ps_instances[dst]; inst++) {
157 iev = &ps->ps_ievs[dst][inst];
159 ps->ps_pp->pp_pipes[dst][inst]) == -1)
175 proc_open(ps, src, dst);
180 proc_init(struct privsep *ps, struct privsep_proc *procs, unsigned int nproc,
190 if (ps->ps_noaction)
195 proc_setup(ps, procs, nproc);
210 for (proc = 0; proc < ps->ps_instances[dst]; proc++) {
211 pa = &ps->ps_pipes[PROC_PARENT][0];
212 pb = &ps->ps_pipes[dst][proc];
224 proc_exec(ps, procs, nproc, argc, argv);
239 p->p_init(ps, p);
245 proc_accept(struct privsep *ps, int fd, enum privsep_procid dst,
248 struct privsep_pipes *pp = ps->ps_pp;
251 if (ps->ps_ievs[dst] == NULL) {
254 __func__, ps->ps_title[privsep_process],
255 privsep_process, ps->ps_instance + 1,
269 iev = &ps->ps_ievs[dst][n];
278 proc_setup(struct privsep *ps, struct privsep_proc *procs, unsigned int nproc)
284 ps->ps_title[PROC_PARENT] = "parent";
288 if (ps->ps_instances[src] < 1)
289 ps->ps_instances[src] = 1;
292 procs[src].p_ps = ps;
297 ps->ps_title[id] = procs[src].p_title;
298 if ((ps->ps_ievs[id] = calloc(ps->ps_instances[id],
303 for (i = 0; i < ps->ps_instances[id]; i++) {
304 ps->ps_ievs[id][i].handler = proc_dispatch;
305 ps->ps_ievs[id][i].events = EV_READ;
306 ps->ps_ievs[id][i].proc = &procs[src];
307 ps->ps_ievs[id][i].data = &ps->ps_ievs[id][i];
314 * - ps->ps_pipes: N:M mapping
319 * - ps->ps_pp: per-process 1:M part of ps->ps_pipes
326 if ((ps->ps_pipes[src] = calloc(ps->ps_instances[src],
330 for (i = 0; i < ps->ps_instances[src]; i++) {
331 pp = &ps->ps_pipes[src][i];
336 calloc(ps->ps_instances[dst],
341 for (j = 0; j < ps->ps_instances[dst]; j++)
347 ps->ps_pp = &ps->ps_pipes[privsep_process][ps->ps_instance];
351 proc_kill(struct privsep *ps)
360 proc_close(ps);
389 proc_open(struct privsep *ps, int src, int dst)
397 for (i = 0; i < ps->ps_instances[src]; i++) {
398 for (j = 0; j < ps->ps_instances[dst]; j++) {
408 pa = &ps->ps_pipes[src][i];
409 pb = &ps->ps_pipes[dst][j];
420 if (proc_compose_imsg(ps, dst, j, IMSG_CTL_PROCFD,
426 if (proc_compose_imsg(ps, src, i, IMSG_CTL_PROCFD,
434 if (proc_flush_imsg(ps, src, i) == -1 ||
435 proc_flush_imsg(ps, dst, j) == -1)
442 proc_close(struct privsep *ps)
447 if (ps == NULL)
450 pp = ps->ps_pp;
453 if (ps->ps_ievs[dst] == NULL)
456 for (n = 0; n < ps->ps_instances[dst]; n++) {
461 event_del(&(ps->ps_ievs[dst][n].ev));
462 imsgbuf_clear(&(ps->ps_ievs[dst][n].ibuf));
466 free(ps->ps_ievs[dst]);
473 struct privsep *ps = p->p_ps;
475 if (p->p_id == PROC_CONTROL && ps)
476 control_cleanup(&ps->ps_csock);
481 proc_close(ps);
511 proc_run(struct privsep *ps, struct privsep_proc *p,
521 if (p->p_id == PROC_CONTROL && ps->ps_instance == 0) {
522 if (control_init(ps, &ps->ps_csock) == -1)
524 TAILQ_FOREACH(rcs, &ps->ps_rcsocks, cs_entry)
525 if (control_init(ps, rcs) == -1)
533 pw = ps->ps_pw;
557 signal_set(&ps->ps_evsigint, SIGINT, proc_sig_handler, p);
558 signal_set(&ps->ps_evsigterm, SIGTERM, proc_sig_handler, p);
559 signal_set(&ps->ps_evsigchld, SIGCHLD, proc_sig_handler, p);
560 signal_set(&ps->ps_evsighup, SIGHUP, proc_sig_handler, p);
561 signal_set(&ps->ps_evsigpipe, SIGPIPE, proc_sig_handler, p);
562 signal_set(&ps->ps_evsigusr1, SIGUSR1, proc_sig_handler, p);
564 signal_add(&ps->ps_evsigint, NULL);
565 signal_add(&ps->ps_evsigterm, NULL);
566 signal_add(&ps->ps_evsigchld, NULL);
567 signal_add(&ps->ps_evsighup, NULL);
568 signal_add(&ps->ps_evsigpipe, NULL);
569 signal_add(&ps->ps_evsigusr1, NULL);
571 proc_setup(ps, procs, nproc);
572 proc_accept(ps, PROC_PARENT_SOCK_FILENO, PROC_PARENT, 0);
573 if (p->p_id == PROC_CONTROL && ps->ps_instance == 0) {
574 if (control_listen(&ps->ps_csock) == -1)
576 TAILQ_FOREACH(rcs, &ps->ps_rcsocks, cs_entry)
582 ps->ps_instance + 1, ps->ps_instances[p->p_id], getpid());
585 run(ps, p, arg);
597 struct privsep *ps = p->p_ps;
605 title = ps->ps_title[privsep_process];
639 __func__, title, ps->ps_instance + 1,
664 proc_accept(ps, imsg_get_fd(&imsg), pf.pf_procid,
670 __func__, title, ps->ps_instance + 1,
733 proc_range(struct privsep *ps, enum privsep_procid id, int *n, int *m)
738 *m = ps->ps_instances[id];
746 proc_compose_imsg(struct privsep *ps, enum privsep_procid id, int n,
751 proc_range(ps, id, &n, &m);
753 if (imsg_compose_event(&ps->ps_ievs[id][n],
754 type, peerid, ps->ps_instance + 1, fd, data, datalen) == -1)
762 proc_compose(struct privsep *ps, enum privsep_procid id,
765 return (proc_compose_imsg(ps, id, -1, type, -1, -1, data, datalen));
769 proc_composev_imsg(struct privsep *ps, enum privsep_procid id, int n,
774 proc_range(ps, id, &n, &m);
776 if (imsg_composev_event(&ps->ps_ievs[id][n],
777 type, peerid, ps->ps_instance + 1, fd, iov, iovcnt) == -1)
784 proc_composev(struct privsep *ps, enum privsep_procid id,
787 return (proc_composev_imsg(ps, id, -1, type, -1, -1, iov, iovcnt));
791 proc_forward_imsg(struct privsep *ps, struct imsg *imsg,
794 return (proc_compose_imsg(ps, id, n, imsg->hdr.type,
799 proc_ibuf(struct privsep *ps, enum privsep_procid id, int n)
803 proc_range(ps, id, &n, &m);
804 return (&ps->ps_ievs[id][n].ibuf);
808 proc_iev(struct privsep *ps, enum privsep_procid id, int n)
812 proc_range(ps, id, &n, &m);
813 return (&ps->ps_ievs[id][n]);
818 proc_flush_imsg(struct privsep *ps, enum privsep_procid id, int n)
823 proc_range(ps, id, &n, &m);
825 if ((ibuf = proc_ibuf(ps, id, n)) == NULL)
829 imsg_event_add(&ps->ps_ievs[id][n]);