Lines Matching defs:ps

72 proc_exec(struct privsep *ps, struct privsep_proc *procs, unsigned int nproc,
110 for (i = 0; i < ps->ps_instances[p->p_id]; i++) {
114 fd = ps->ps_pipes[p->p_id][i].pp_pipes[PROC_PARENT][0];
115 ps->ps_pipes[p->p_id][i].pp_pipes[PROC_PARENT][0] = -1;
144 proc_connect(struct privsep *ps, void (*connected)(struct privsep *))
150 if (ps->ps_noaction) {
153 connected(ps);
156 ps->ps_connected = connected;
163 for (inst = 0; inst < ps->ps_instances[dst]; inst++) {
164 iev = &ps->ps_ievs[dst][inst];
166 ps->ps_pp->pp_pipes[dst][inst]) == -1)
182 proc_open(ps, src, dst);
194 for (inst = 0; inst < ps->ps_instances[dst]; inst++) {
195 if (proc_compose_imsg(ps, dst, inst, IMSG_CTL_PROCREADY,
198 ps->ps_connecting++;
201 ps->ps_connecting, ps->ps_title[dst], inst + 1);
208 proc_init(struct privsep *ps, struct privsep_proc *procs, unsigned int nproc,
218 if (ps->ps_noaction)
223 proc_setup(ps, procs, nproc);
238 for (proc = 0; proc < ps->ps_instances[dst]; proc++) {
239 pa = &ps->ps_pipes[PROC_PARENT][0];
240 pb = &ps->ps_pipes[dst][proc];
252 proc_exec(ps, procs, nproc, argc, argv);
267 p->p_init(ps, p);
273 proc_accept(struct privsep *ps, int fd, enum privsep_procid dst,
276 struct privsep_pipes *pp = ps->ps_pp;
279 if (ps->ps_ievs[dst] == NULL) {
282 __func__, ps->ps_title[privsep_process],
283 privsep_process, ps->ps_instance + 1,
297 iev = &ps->ps_ievs[dst][n];
306 proc_setup(struct privsep *ps, struct privsep_proc *procs, unsigned int nproc)
312 ps->ps_title[PROC_PARENT] = "parent";
316 if (ps->ps_instances[src] < 1)
317 ps->ps_instances[src] = 1;
320 procs[src].p_ps = ps;
325 ps->ps_title[id] = procs[src].p_title;
326 if ((ps->ps_ievs[id] = calloc(ps->ps_instances[id],
331 for (i = 0; i < ps->ps_instances[id]; i++) {
332 ps->ps_ievs[id][i].handler = proc_dispatch;
333 ps->ps_ievs[id][i].events = EV_READ;
334 ps->ps_ievs[id][i].proc = &procs[src];
335 ps->ps_ievs[id][i].data = &ps->ps_ievs[id][i];
342 * - ps->ps_pipes: N:M mapping
347 * - ps->ps_pp: per-process 1:M part of ps->ps_pipes
354 if ((ps->ps_pipes[src] = calloc(ps->ps_instances[src],
358 for (i = 0; i < ps->ps_instances[src]; i++) {
359 pp = &ps->ps_pipes[src][i];
364 calloc(ps->ps_instances[dst],
369 for (j = 0; j < ps->ps_instances[dst]; j++)
375 ps->ps_pp = &ps->ps_pipes[privsep_process][ps->ps_instance];
379 proc_kill(struct privsep *ps)
388 proc_close(ps);
417 proc_open(struct privsep *ps, int src, int dst)
425 for (i = 0; i < ps->ps_instances[src]; i++) {
426 for (j = 0; j < ps->ps_instances[dst]; j++) {
431 pa = &ps->ps_pipes[src][i];
432 pb = &ps->ps_pipes[dst][j];
443 if (proc_compose_imsg(ps, dst, j, IMSG_CTL_PROCFD,
449 if (proc_compose_imsg(ps, src, i, IMSG_CTL_PROCFD,
457 if (proc_flush_imsg(ps, src, i) == -1 ||
458 proc_flush_imsg(ps, dst, j) == -1)
465 proc_close(struct privsep *ps)
470 if (ps == NULL)
473 pp = ps->ps_pp;
476 if (ps->ps_ievs[dst] == NULL)
479 for (n = 0; n < ps->ps_instances[dst]; n++) {
484 event_del(&(ps->ps_ievs[dst][n].ev));
485 imsgbuf_clear(&(ps->ps_ievs[dst][n].ibuf));
489 free(ps->ps_ievs[dst]);
496 struct privsep *ps = p->p_ps;
501 proc_close(ps);
531 proc_run(struct privsep *ps, struct privsep_proc *p,
540 if (p->p_id == PROC_CONTROL && ps->ps_instance == 0) {
541 if (control_init(ps, &ps->ps_csock) == -1)
549 pw = ps->ps_pw;
573 signal_set(&ps->ps_evsigint, SIGINT, proc_sig_handler, p);
574 signal_set(&ps->ps_evsigterm, SIGTERM, proc_sig_handler, p);
575 signal_set(&ps->ps_evsigchld, SIGCHLD, proc_sig_handler, p);
576 signal_set(&ps->ps_evsighup, SIGHUP, proc_sig_handler, p);
577 signal_set(&ps->ps_evsigpipe, SIGPIPE, proc_sig_handler, p);
578 signal_set(&ps->ps_evsigusr1, SIGUSR1, proc_sig_handler, p);
580 signal_add(&ps->ps_evsigint, NULL);
581 signal_add(&ps->ps_evsigterm, NULL);
582 signal_add(&ps->ps_evsigchld, NULL);
583 signal_add(&ps->ps_evsighup, NULL);
584 signal_add(&ps->ps_evsigpipe, NULL);
585 signal_add(&ps->ps_evsigusr1, NULL);
587 proc_setup(ps, procs, nproc);
588 proc_accept(ps, PROC_PARENT_SOCK_FILENO, PROC_PARENT, 0);
589 if (p->p_id == PROC_CONTROL && ps->ps_instance == 0) {
590 if (control_listen(&ps->ps_csock) == -1)
596 ps->ps_instance + 1, ps->ps_instances[p->p_id], getpid());
600 run(ps, p, arg);
612 struct privsep *ps = p->p_ps;
620 title = ps->ps_title[privsep_process];
653 __func__, title, ps->ps_instance + 1,
678 proc_accept(ps, imsg_get_fd(&imsg), pf.pf_procid,
685 ps->ps_connecting, p->p_title, imsg.hdr.pid,
686 title, ps->ps_instance + 1);
690 if (proc_compose_imsg(ps, PROC_PARENT, 0,
695 if (ps->ps_connecting == 0)
697 if (ps->ps_instance != 0)
699 __func__, ps->ps_instance);
700 if (ps->ps_connected == NULL)
702 if (--ps->ps_connecting == 0) {
704 ps->ps_connected(ps);
711 __func__, title, ps->ps_instance + 1,
774 proc_range(struct privsep *ps, enum privsep_procid id, int *n, int *m)
779 *m = ps->ps_instances[id];
787 proc_compose_imsg(struct privsep *ps, enum privsep_procid id, int n,
792 proc_range(ps, id, &n, &m);
794 if (imsg_compose_event(&ps->ps_ievs[id][n],
795 type, peerid, ps->ps_instance + 1, fd, data, datalen) == -1)
803 proc_compose(struct privsep *ps, enum privsep_procid id,
806 return (proc_compose_imsg(ps, id, -1, type, -1, -1, data, datalen));
810 proc_composev_imsg(struct privsep *ps, enum privsep_procid id, int n,
815 proc_range(ps, id, &n, &m);
817 if (imsg_composev_event(&ps->ps_ievs[id][n],
818 type, peerid, ps->ps_instance + 1, fd, iov, iovcnt) == -1)
825 proc_composev(struct privsep *ps, enum privsep_procid id,
828 return (proc_composev_imsg(ps, id, -1, type, -1, -1, iov, iovcnt));
832 proc_forward_imsg(struct privsep *ps, struct imsg *imsg,
835 return (proc_compose_imsg(ps, id, n, imsg->hdr.type,
840 proc_ibuf(struct privsep *ps, enum privsep_procid id, int n)
844 proc_range(ps, id, &n, &m);
845 return (&ps->ps_ievs[id][n].ibuf);
849 proc_iev(struct privsep *ps, enum privsep_procid id, int n)
853 proc_range(ps, id, &n, &m);
854 return (&ps->ps_ievs[id][n]);
859 proc_flush_imsg(struct privsep *ps, enum privsep_procid id, int n)
864 proc_range(ps, id, &n, &m);
866 if ((ibuf = proc_ibuf(ps, id, n)) == NULL)
870 imsg_event_add(&ps->ps_ievs[id][n]);