Lines Matching defs:ps

69 proc_exec(struct privsep *ps, struct privsep_proc *procs, unsigned int nproc,
107 for (i = 0; i < ps->ps_instances[p->p_id]; i++) {
111 fd = ps->ps_pipes[p->p_id][i].pp_pipes[PROC_PARENT][0];
112 ps->ps_pipes[p->p_id][i].pp_pipes[PROC_PARENT][0] = -1;
141 proc_connect(struct privsep *ps)
147 if (ps->ps_noaction)
155 for (inst = 0; inst < ps->ps_instances[dst]; inst++) {
156 iev = &ps->ps_ievs[dst][inst];
158 ps->ps_pp->pp_pipes[dst][inst]) == -1)
174 proc_open(ps, src, dst);
179 proc_init(struct privsep *ps, struct privsep_proc *procs, unsigned int nproc,
189 if (ps->ps_noaction)
194 proc_setup(ps, procs, nproc);
209 for (proc = 0; proc < ps->ps_instances[dst]; proc++) {
210 pa = &ps->ps_pipes[PROC_PARENT][0];
211 pb = &ps->ps_pipes[dst][proc];
223 proc_exec(ps, procs, nproc, argc, argv);
238 p->p_init(ps, p);
244 proc_accept(struct privsep *ps, int fd, enum privsep_procid dst,
247 struct privsep_pipes *pp = ps->ps_pp;
250 if (ps->ps_ievs[dst] == NULL) {
253 __func__, ps->ps_title[privsep_process],
254 privsep_process, ps->ps_instance + 1,
268 iev = &ps->ps_ievs[dst][n];
277 proc_setup(struct privsep *ps, struct privsep_proc *procs, unsigned int nproc)
283 ps->ps_title[PROC_PARENT] = "vmd";
287 if (ps->ps_instances[src] < 1)
288 ps->ps_instances[src] = 1;
291 procs[src].p_ps = ps;
296 ps->ps_title[id] = procs[src].p_title;
297 if ((ps->ps_ievs[id] = calloc(ps->ps_instances[id],
302 for (i = 0; i < ps->ps_instances[id]; i++) {
303 ps->ps_ievs[id][i].handler = proc_dispatch;
304 ps->ps_ievs[id][i].events = EV_READ;
305 ps->ps_ievs[id][i].proc = &procs[src];
306 ps->ps_ievs[id][i].data = &ps->ps_ievs[id][i];
313 * - ps->ps_pipes: N:M mapping
318 * - ps->ps_pp: per-process 1:M part of ps->ps_pipes
325 if ((ps->ps_pipes[src] = calloc(ps->ps_instances[src],
329 for (i = 0; i < ps->ps_instances[src]; i++) {
330 pp = &ps->ps_pipes[src][i];
335 calloc(ps->ps_instances[dst],
340 for (j = 0; j < ps->ps_instances[dst]; j++)
346 ps->ps_pp = &ps->ps_pipes[privsep_process][ps->ps_instance];
350 proc_kill(struct privsep *ps)
359 proc_close(ps);
388 proc_open(struct privsep *ps, int src, int dst)
396 for (i = 0; i < ps->ps_instances[src]; i++) {
397 for (j = 0; j < ps->ps_instances[dst]; j++) {
402 pa = &ps->ps_pipes[src][i];
403 pb = &ps->ps_pipes[dst][j];
414 if (proc_compose_imsg(ps, dst, j, IMSG_CTL_PROCFD,
420 if (proc_compose_imsg(ps, src, i, IMSG_CTL_PROCFD,
428 if (proc_flush_imsg(ps, src, i) == -1 ||
429 proc_flush_imsg(ps, dst, j) == -1)
436 proc_close(struct privsep *ps)
441 if (ps == NULL)
444 pp = ps->ps_pp;
447 if (ps->ps_ievs[dst] == NULL)
450 for (n = 0; n < ps->ps_instances[dst]; n++) {
455 event_del(&(ps->ps_ievs[dst][n].ev));
456 imsgbuf_clear(&(ps->ps_ievs[dst][n].ibuf));
460 free(ps->ps_ievs[dst]);
467 struct privsep *ps = p->p_ps;
472 proc_close(ps);
502 proc_run(struct privsep *ps, struct privsep_proc *p,
512 if (p->p_id == PROC_CONTROL && ps->ps_instance == 0) {
513 if (control_init(ps, &ps->ps_csock) == -1)
515 TAILQ_FOREACH(rcs, &ps->ps_rcsocks, cs_entry)
516 if (control_init(ps, rcs) == -1)
524 pw = ps->ps_pw;
548 signal_set(&ps->ps_evsigint, SIGINT, proc_sig_handler, p);
549 signal_set(&ps->ps_evsigterm, SIGTERM, proc_sig_handler, p);
550 signal_set(&ps->ps_evsigchld, SIGCHLD, proc_sig_handler, p);
551 signal_set(&ps->ps_evsighup, SIGHUP, proc_sig_handler, p);
552 signal_set(&ps->ps_evsigpipe, SIGPIPE, proc_sig_handler, p);
553 signal_set(&ps->ps_evsigusr1, SIGUSR1, proc_sig_handler, p);
555 signal_add(&ps->ps_evsigint, NULL);
556 signal_add(&ps->ps_evsigterm, NULL);
557 signal_add(&ps->ps_evsigchld, NULL);
558 signal_add(&ps->ps_evsighup, NULL);
559 signal_add(&ps->ps_evsigpipe, NULL);
560 signal_add(&ps->ps_evsigusr1, NULL);
562 proc_setup(ps, procs, nproc);
563 proc_accept(ps, PROC_PARENT_SOCK_FILENO, PROC_PARENT, 0);
564 if (p->p_id == PROC_CONTROL && ps->ps_instance == 0) {
565 if (control_listen(&ps->ps_csock) == -1)
567 TAILQ_FOREACH(rcs, &ps->ps_rcsocks, cs_entry)
573 ps->ps_instance + 1, ps->ps_instances[p->p_id], getpid());
576 run(ps, p, arg);
588 struct privsep *ps = p->p_ps;
596 title = ps->ps_title[privsep_process];
630 __func__, title, ps->ps_instance + 1,
655 proc_accept(ps, imsg_get_fd(&imsg), pf.pf_procid,
661 __func__, title, ps->ps_instance + 1,
739 proc_range(struct privsep *ps, enum privsep_procid id, int *n, int *m)
744 *m = ps->ps_instances[id];
752 proc_compose_imsg(struct privsep *ps, enum privsep_procid id, int n,
757 proc_range(ps, id, &n, &m);
759 if (imsg_compose_event(&ps->ps_ievs[id][n],
760 type, peerid, ps->ps_instance + 1, fd, data, datalen) == -1)
768 proc_compose(struct privsep *ps, enum privsep_procid id,
771 return (proc_compose_imsg(ps, id, -1, type, -1, -1, data, datalen));
775 proc_composev_imsg(struct privsep *ps, enum privsep_procid id, int n,
780 proc_range(ps, id, &n, &m);
782 if (imsg_composev_event(&ps->ps_ievs[id][n],
783 type, peerid, ps->ps_instance + 1, fd, iov, iovcnt) == -1)
790 proc_composev(struct privsep *ps, enum privsep_procid id,
793 return (proc_composev_imsg(ps, id, -1, type, -1, -1, iov, iovcnt));
797 proc_forward_imsg(struct privsep *ps, struct imsg *imsg,
800 return (proc_compose_imsg(ps, id, n, imsg->hdr.type,
806 proc_ibuf(struct privsep *ps, enum privsep_procid id, int n)
810 proc_range(ps, id, &n, &m);
811 return (&ps->ps_ievs[id][n].ibuf);
815 proc_iev(struct privsep *ps, enum privsep_procid id, int n)
819 proc_range(ps, id, &n, &m);
820 return (&ps->ps_ievs[id][n]);
825 proc_flush_imsg(struct privsep *ps, enum privsep_procid id, int n)
830 proc_range(ps, id, &n, &m);
832 if ((ibuf = proc_ibuf(ps, id, n)) == NULL)
836 imsg_event_add(&ps->ps_ievs[id][n]);