Lines Matching refs:sep

410 		struct servtab	*sep;
441 sep = (struct servtab *)ev->udata;
443 if ((int)ev->ident != sep->se_fd)
445 DPRINTF(SERV_FMT ": service requested" , SERV_PARAMS(sep));
446 if (sep->se_wait == 0 && sep->se_socktype == SOCK_STREAM) {
448 ctrl = accept(sep->se_fd, NULL, NULL);
450 SERV_PARAMS(sep), ctrl);
455 SERV_PARAMS(sep));
459 ctrl = sep->se_fd;
460 spawn(sep, ctrl);
466 spawn(struct servtab *sep, int ctrl)
475 dofork = (sep->se_bi == NULL || sep->se_bi->bi_fork);
478 if (rl_process(sep, ctrl)) {
484 if (sep->se_wait == 0 && sep->se_socktype == SOCK_STREAM)
489 if (pid != 0 && sep->se_wait != 0) {
492 sep->se_wait = pid;
494 EV_SET(ev, sep->se_fd, EVFILT_READ,
508 run_service(ctrl, sep, dofork);
512 if (sep->se_wait == 0 && sep->se_socktype == SOCK_STREAM)
517 run_service(int ctrl, struct servtab *sep, int didfork)
532 if (sep->se_bi == 0)
534 if (sep->se_wait == 0 && sep->se_socktype == SOCK_STREAM) {
535 request_init(&req, RQ_DAEMON, sep->se_argv[0] != NULL ?
536 sep->se_argv[0] : sep->se_service, RQ_FILE, ctrl, NULL);
540 if (getnameinfo(&sep->se_ctrladdr,
541 (socklen_t)sep->se_ctrladdr.sa_len, NULL, 0,
545 ntohs(sep->se_ctrladdr_in.sin_port));
558 eval_client(&req), abuf, service, sep->se_proto);
564 eval_client(&req), abuf, service, sep->se_proto);
569 if (sep->se_bi != NULL) {
577 (*sep->se_bi->bi_fn)(ctrl, sep);
579 if ((pwd = getpwnam(sep->se_user)) == NULL) {
581 sep->se_service, sep->se_proto, sep->se_user);
584 if (sep->se_group != NULL &&
585 (grp = getgrnam(sep->se_group)) == NULL) {
587 sep->se_service, sep->se_proto, sep->se_group);
591 if (sep->se_group != NULL)
595 "%s/%s: can't set gid %d: %m", sep->se_service,
596 sep->se_proto, pwd->pw_gid);
603 "%s/%s: can't set uid %d: %m", sep->se_service,
604 sep->se_proto, pwd->pw_uid);
607 } else if (sep->se_group != NULL) {
611 getpid(), sep->se_server);
626 execv(sep->se_server, sep->se_argv);
627 syslog(LOG_ERR, "cannot execute %s: %m", sep->se_server);
629 if (sep->se_socktype != SOCK_STREAM)
640 struct servtab *sep;
647 for (sep = servtab; sep != NULL; sep = sep->se_next)
648 if (sep->se_wait == pid) {
654 sep->se_server, WEXITSTATUS(status));
658 sep->se_server, WTERMSIG(status));
659 sep->se_wait = 1;
661 EV_SET(ev, sep->se_fd, EVFILT_READ,
662 EV_ADD | EV_ENABLE, 0, 0, (intptr_t)sep);
664 sep->se_service, sep->se_fd);
672 struct servtab *sep;
675 for (sep = servtab; sep != NULL; sep = sep->se_next) {
676 if (sep->se_fd == -1 && !ISMUX(sep)) {
677 switch (sep->se_family) {
683 setup(sep);
684 if (sep->se_fd >= 0 && isrpcservice(sep))
685 register_rpc(sep);
695 struct servtab *sep;
697 for (sep = servtab; sep != NULL; sep = sep->se_next) {
698 if (sep->se_fd == -1)
701 switch (sep->se_family) {
703 (void)unlink(sep->se_service);
709 if (sep->se_wait == 1 && isrpcservice(sep))
710 unregister_rpc(sep);
713 (void)close(sep->se_fd);
714 sep->se_fd = -1;
723 setup(struct servtab *sep)
731 if ((sep->se_fd = socket(sep->se_family, sep->se_socktype, 0)) < 0) {
733 SERV_PARAMS(sep), strerror(errno));
735 sep->se_service, sep->se_proto);
739 if (fcntl(sep->se_fd, F_SETFD, FD_CLOEXEC) < 0) {
741 SERV_PARAMS(sep));
742 close(sep->se_fd);
743 sep->se_fd = -1;
749 if (strcmp(sep->se_proto, "tcp") == 0 && (options & SO_DEBUG) &&
750 turnon(sep->se_fd, SO_DEBUG) < 0)
752 if (turnon(sep->se_fd, SO_REUSEADDR) < 0)
757 if (sep->se_sndbuf != 0 && setsockopt(sep->se_fd, SOL_SOCKET,
758 SO_SNDBUF, &sep->se_sndbuf, (socklen_t)sizeof(sep->se_sndbuf)) < 0)
760 sep->se_sndbuf);
761 if (sep->se_rcvbuf != 0 && setsockopt(sep->se_fd, SOL_SOCKET,
762 SO_RCVBUF, &sep->se_rcvbuf, (socklen_t)sizeof(sep->se_rcvbuf)) < 0)
764 sep->se_rcvbuf);
766 if (sep->se_family == AF_INET6) {
768 v = (sep->se_type == FAITH_TYPE) ? &on : &off;
769 if (setsockopt(sep->se_fd, IPPROTO_IPV6, IPV6_FAITH,
776 if (sep->se_policy != NULL) {
777 int e = ipsecsetup(sep->se_family, sep->se_fd, sep->se_policy);
780 SERV_PARAMS(sep));
781 (void)close(sep->se_fd);
782 sep->se_fd = -1;
788 if (bind(sep->se_fd, &sep->se_ctrladdr, sep->se_ctrladdr_size) < 0) {
790 SERV_PARAMS(sep), strerror(errno));
792 SERV_PARAMS(sep));
793 (void) close(sep->se_fd);
794 sep->se_fd = -1;
801 if (sep->se_socktype == SOCK_STREAM)
802 listen(sep->se_fd, 10);
805 if (sep->se_socktype == SOCK_DGRAM && sep->se_bi != NULL) {
806 switch (sep->se_family) {
808 if (setsockopt(sep->se_fd, IPPROTO_IP,
815 if (setsockopt(sep->se_fd, IPPROTO_IPV6,
825 if (sep->se_accf.af_name[0] != 0 && setsockopt(sep->se_fd, SOL_SOCKET,
826 SO_ACCEPTFILTER, &sep->se_accf,
827 (socklen_t)sizeof(sep->se_accf)) < 0)
829 sep->se_accf.af_name);
832 EV_SET(ev, sep->se_fd, EVFILT_READ, EV_ADD | EV_ENABLE, 0, 0,
833 (intptr_t)sep);
834 if (sep->se_fd > maxsock) {
835 maxsock = sep->se_fd;
839 DPRINTF(SERV_FMT ": registered on fd %d", SERV_PARAMS(sep), sep->se_fd);
846 close_sep(struct servtab *sep)
849 if (sep->se_fd >= 0) {
850 (void) close(sep->se_fd);
851 sep->se_fd = -1;
853 sep->se_count = 0;
854 if (sep->se_ip_max != SERVTAB_UNSPEC_SIZE_T) {
855 rl_clear_ip_list(sep);
860 register_rpc(struct servtab *sep)
869 if ((nconf = getnetconfigent(sep->se_proto+4)) == NULL) {
871 sep->se_proto);
875 if (getsockname(sep->se_fd, (struct sockaddr *)(void *)&ss, &socklen) < 0) {
877 SERV_PARAMS(sep));
884 for (n = sep->se_rpcversl; n <= sep->se_rpcversh; n++) {
886 sep->se_rpcprog, n, nconf->nc_netid,
888 (void)rpcb_unset((unsigned int)sep->se_rpcprog, (unsigned int)n, nconf);
889 if (rpcb_set((unsigned int)sep->se_rpcprog, (unsigned int)n, nconf, &nbuf) == 0)
891 sep->se_rpcprog, n, nconf->nc_netid,
898 unregister_rpc(struct servtab *sep)
904 if ((nconf = getnetconfigent(sep->se_proto+4)) == NULL) {
906 sep->se_proto);
910 for (n = sep->se_rpcversl; n <= sep->se_rpcversh; n++) {
912 sep->se_rpcprog, n, nconf->nc_netid);
913 if (rpcb_unset((unsigned int)sep->se_rpcprog, (unsigned int)n, nconf) == 0)
915 sep->se_rpcprog, n, nconf->nc_netid);
1159 echo_stream(int s, struct servtab *sep) /* Echo service -- echo data back */
1164 inetd_setproctitle(sep->se_service, s);
1172 echo_dg(int s, struct servtab *sep) /* Echo service -- echo data back */
1194 discard_stream(int s, struct servtab *sep) /* Discard service -- ignore data */
1198 inetd_setproctitle(sep->se_service, s);
1206 discard_dg(int s, struct servtab *sep) /* Discard service -- ignore data */
1232 chargen_stream(int s, struct servtab *sep) /* Character generator */
1237 inetd_setproctitle(sep->se_service, s);
1262 chargen_dg(int s, struct servtab *sep) /* Character generator */
1324 machtime_stream(int s, struct servtab *sep)
1334 machtime_dg(int s, struct servtab *sep)
1356 daytime_stream(int s,struct servtab *sep)
1371 daytime_dg(int s, struct servtab *sep)
1440 tcpmux(int ctrl, struct servtab *sep)
1461 for (sep = servtab; sep != NULL; sep = sep->se_next) {
1462 if (!ISMUX(sep))
1464 (void)write(ctrl, sep->se_service,
1465 strlen(sep->se_service));
1472 for (sep = servtab; sep != NULL; sep = sep->se_next) {
1473 if (!ISMUX(sep))
1475 if (strcasecmp(service, sep->se_service) == 0) {
1476 if (ISMUXPLUS(sep))
1478 run_service(ctrl, sep, true /* forked */);
1608 try_biltin(struct servtab *sep)
1611 if (biltins[i].bi_socktype == sep->se_socktype &&
1612 strcmp(biltins[i].bi_service, sep->se_service) == 0) {
1613 sep->se_bi = &biltins[i];
1614 sep->se_wait = biltins[i].bi_wait;