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++) {
407 pa = &ps->ps_pipes[src][i];
408 pb = &ps->ps_pipes[dst][j];
419 if (proc_compose_imsg(ps, dst, j, IMSG_CTL_PROCFD,
425 if (proc_compose_imsg(ps, src, i, IMSG_CTL_PROCFD,
433 if (proc_flush_imsg(ps, src, i) == -1 ||
434 proc_flush_imsg(ps, dst, j) == -1)
441 proc_close(struct privsep *ps)
446 if (ps == NULL)
449 pp = ps->ps_pp;
452 if (ps->ps_ievs[dst] == NULL)
455 for (n = 0; n < ps->ps_instances[dst]; n++) {
460 event_del(&(ps->ps_ievs[dst][n].ev));
461 imsgbuf_clear(&(ps->ps_ievs[dst][n].ibuf));
465 free(ps->ps_ievs[dst]);
472 struct privsep *ps = p->p_ps;
474 if (p->p_id == PROC_CONTROL && ps)
475 control_cleanup(&ps->ps_csock);
480 proc_close(ps);
510 proc_run(struct privsep *ps, struct privsep_proc *p,
520 if (p->p_id == PROC_CONTROL && ps->ps_instance == 0) {
521 if (control_init(ps, &ps->ps_csock) == -1)
523 TAILQ_FOREACH(rcs, &ps->ps_rcsocks, cs_entry)
524 if (control_init(ps, rcs) == -1)
532 pw = ps->ps_pw;
556 signal_set(&ps->ps_evsigint, SIGINT, proc_sig_handler, p);
557 signal_set(&ps->ps_evsigterm, SIGTERM, proc_sig_handler, p);
558 signal_set(&ps->ps_evsigchld, SIGCHLD, proc_sig_handler, p);
559 signal_set(&ps->ps_evsighup, SIGHUP, proc_sig_handler, p);
560 signal_set(&ps->ps_evsigpipe, SIGPIPE, proc_sig_handler, p);
561 signal_set(&ps->ps_evsigusr1, SIGUSR1, proc_sig_handler, p);
563 signal_add(&ps->ps_evsigint, NULL);
564 signal_add(&ps->ps_evsigterm, NULL);
565 signal_add(&ps->ps_evsigchld, NULL);
566 signal_add(&ps->ps_evsighup, NULL);
567 signal_add(&ps->ps_evsigpipe, NULL);
568 signal_add(&ps->ps_evsigusr1, NULL);
570 proc_setup(ps, procs, nproc);
571 proc_accept(ps, PROC_PARENT_SOCK_FILENO, PROC_PARENT, 0);
572 if (p->p_id == PROC_CONTROL && ps->ps_instance == 0) {
573 if (control_listen(&ps->ps_csock) == -1)
575 TAILQ_FOREACH(rcs, &ps->ps_rcsocks, cs_entry)
581 ps->ps_instance + 1, ps->ps_instances[p->p_id], getpid());
584 run(ps, p, arg);
596 struct privsep *ps = p->p_ps;
604 title = ps->ps_title[privsep_process];
638 __func__, title, ps->ps_instance + 1,
663 proc_accept(ps, imsg_get_fd(&imsg), pf.pf_procid,
669 __func__, title, ps->ps_instance + 1,
732 proc_range(struct privsep *ps, enum privsep_procid id, int *n, int *m)
737 *m = ps->ps_instances[id];
745 proc_compose_imsg(struct privsep *ps, enum privsep_procid id, int n,
750 proc_range(ps, id, &n, &m);
752 if (imsg_compose_event(&ps->ps_ievs[id][n],
753 type, peerid, ps->ps_instance + 1, fd, data, datalen) == -1)
761 proc_compose(struct privsep *ps, enum privsep_procid id,
764 return (proc_compose_imsg(ps, id, -1, type, -1, -1, data, datalen));
768 proc_composev_imsg(struct privsep *ps, enum privsep_procid id, int n,
773 proc_range(ps, id, &n, &m);
775 if (imsg_composev_event(&ps->ps_ievs[id][n],
776 type, peerid, ps->ps_instance + 1, fd, iov, iovcnt) == -1)
783 proc_composev(struct privsep *ps, enum privsep_procid id,
786 return (proc_composev_imsg(ps, id, -1, type, -1, -1, iov, iovcnt));
790 proc_forward_imsg(struct privsep *ps, struct imsg *imsg,
793 return (proc_compose_imsg(ps, id, n, imsg->hdr.type,
798 proc_ibuf(struct privsep *ps, enum privsep_procid id, int n)
802 proc_range(ps, id, &n, &m);
803 return (&ps->ps_ievs[id][n].ibuf);
807 proc_iev(struct privsep *ps, enum privsep_procid id, int n)
811 proc_range(ps, id, &n, &m);
812 return (&ps->ps_ievs[id][n]);
817 proc_flush_imsg(struct privsep *ps, enum privsep_procid id, int n)
822 proc_range(ps, id, &n, &m);
824 if ((ibuf = proc_ibuf(ps, id, n)) == NULL)
828 imsg_event_add(&ps->ps_ievs[id][n]);