Lines Matching refs:sep

134 	struct servtab *sep, *cp;
159 for (sep = servtab; sep != NULL; sep = sep->se_next)
160 if (is_same_service(sep, cp))
162 if (sep != NULL) {
168 * sep->se_wait may be holding the pid of a daemon
174 (sep->se_wait == 1 || cp->se_wait == 0))
175 sep->se_wait = cp->se_wait;
176 SWAP(char *, sep->se_user, cp->se_user);
177 SWAP(char *, sep->se_group, cp->se_group);
178 SWAP(char *, sep->se_server, cp->se_server);
180 SWAP(char *, sep->se_argv[i], cp->se_argv[i]);
182 SWAP(char *, sep->se_policy, cp->se_policy);
184 SWAP(service_type, cp->se_type, sep->se_type);
185 SWAP(size_t, cp->se_service_max, sep->se_service_max);
186 SWAP(size_t, cp->se_ip_max, sep->se_ip_max);
188 if (isrpcservice(sep))
189 unregister_rpc(sep);
190 sep->se_rpcversl = cp->se_rpcversl;
191 sep->se_rpcversh = cp->se_rpcversh;
195 print_service("REDO", sep);
198 sep = enter(cp);
201 print_service("ADD ", sep);
204 sep->se_checked = 1;
211 switch (sep->se_family) {
213 if (sep->se_fd != -1)
215 n = strlen(sep->se_service);
216 if (n >= sizeof(sep->se_ctrladdr_un.sun_path)) {
218 sep->se_service, sep->se_proto);
219 sep->se_checked = 0;
222 (void)unlink(sep->se_service);
223 strlcpy(sep->se_ctrladdr_un.sun_path,
224 sep->se_service, n + 1);
225 sep->se_ctrladdr_un.sun_family = AF_LOCAL;
226 sep->se_ctrladdr_size = (socklen_t)(n +
227 sizeof(sep->se_ctrladdr_un) -
228 sizeof(sep->se_ctrladdr_un.sun_path));
229 if (!ISMUX(sep))
230 setup(sep);
244 s = socket(sep->se_family, SOCK_DGRAM, 0);
249 sep->se_service, sep->se_proto,
250 sep->se_hostaddr);
251 sep->se_checked = false;
257 hints.ai_family = sep->se_family;
258 hints.ai_socktype = sep->se_socktype;
260 if (strcmp(sep->se_hostaddr, "*") == 0)
263 host = sep->se_hostaddr;
264 if (isrpcservice(sep) || ISMUX(sep))
267 port = sep->se_service;
274 SERV_PARAMS(sep));
277 SERV_PARAMS(sep),
278 sep->se_hostaddr,
281 sep->se_checked = false;
287 SERV_PARAMS(sep),
288 sep->se_hostaddr);
289 sep->se_checked = false;
293 memcpy(&sep->se_ctrladdr, res->ai_addr,
295 if (ISMUX(sep)) {
296 sep->se_fd = -1;
300 sep->se_ctrladdr_size = res->ai_addrlen;
303 if (isrpcservice(sep)) {
306 sep->se_rpcprog = atoi(sep->se_service);
307 if (sep->se_rpcprog == 0) {
308 rp = getrpcbyname(sep->se_service);
313 SERV_PARAMS(sep));
314 sep->se_checked = false;
317 sep->se_rpcprog = rp->r_number;
319 if (sep->se_fd == -1 && !ISMUX(sep))
320 setup(sep);
321 if (sep->se_fd != -1)
322 register_rpc(sep);
326 if (sep->se_fd >= 0)
327 close_sep(sep);
328 if (sep->se_fd == -1 && !ISMUX(sep))
329 setup(sep);
340 struct servtab *sep;
342 sep = malloc(sizeof (*sep));
343 if (sep == NULL) {
347 *sep = *cp;
348 sep->se_fd = -1;
349 sep->se_rpcprog = -1;
350 sep->se_next = servtab;
351 servtab = sep;
352 return (sep);
386 struct servtab *sep = &serv;
473 *sep = init_servtab();
481 sep->se_hostaddr = newstr(arg + 1);
483 sep->se_hostaddr = newstr(arg);
493 defhost = sep->se_hostaddr;
499 sep->se_hostaddr = NULL;
504 sep->se_type = MUXPLUS_TYPE;
507 sep->se_type = MUX_TYPE;
508 sep->se_service = newstr(c);
510 sep->se_service = newstr(arg);
511 sep->se_type = NORM_TYPE;
514 DPRINTCONF("Found service definition '%s'", sep->se_service);
520 freeconfig(sep);
531 switch(parse_syntax_v2(sep, &cp)) {
534 return sep;
541 freeconfig(sep);
549 freeconfig(sep);
559 switch(parse_syntax_v2(sep, &cp)) {
563 freeconfig(sep);
568 freeconfig(sep);
573 parse_socktype(arg, sep);
574 if (sep->se_socktype == SOCK_STREAM) {
575 parse_accept_filter(arg, sep);
577 if (sep->se_hostaddr == NULL) {
579 sep->se_hostaddr = newstr(defhost);
587 freeconfig(sep);
590 if (sep->se_type == NORM_TYPE &&
593 sep->se_type = FAITH_TYPE;
595 sep->se_proto = newstr(arg);
600 sep->se_service, (arg)); \
601 freeconfig(sep); \
620 sep->se_service, (arg)); \
621 freeconfig(sep); \
629 sep->se_sndbuf = val; \
631 sep->se_rcvbuf = val; \
640 sep->se_sndbuf = sep->se_rcvbuf = 0;
642 if ((buf0 = strchr(sep->se_proto, ',')) != NULL) {
644 if (ISMUX(sep)) {
646 "tcpmux services", sep->se_service);
661 sep->se_service);
693 if (parse_protocol(sep)) {
694 freeconfig(sep);
702 freeconfig(sep);
713 sep->se_service_max = (size_t)strtou(cp1, NULL, 10, 0,
719 sep->se_service_max = 0;
725 sep->se_service_max,
730 sep->se_service_max = TOOMANY;
732 if (parse_wait(sep, strcmp(arg, "wait") == 0)) {
733 freeconfig(sep);
741 freeconfig(sep);
752 sep->se_group = NULL;
755 sep->se_group = newstr(separator + 1);
758 sep->se_user = newstr(arg);
764 freeconfig(sep);
767 if (parse_server(sep, arg)) {
768 freeconfig(sep);
775 sep->se_argv[argc++] = newstr(arg);
778 sep->se_argv[argc++] = NULL;
780 sep->se_policy = policy != NULL ? newstr(policy) : NULL;
784 return (sep);
894 print_service(const char *action, struct servtab *sep)
897 if (isrpcservice(sep))
906 action, sep->se_service,
907 sep->se_rpcprog, sep->se_rpcversh, sep->se_rpcversl,
908 sep->se_proto, sep->se_wait, sep->se_service_max,
909 sep->se_user, sep->se_group,
910 (long)sep->se_bi, sep->se_server
912 , (sep->se_policy != NULL ? sep->se_policy : "")
924 action, sep->se_hostaddr, sep->se_service,
925 sep->se_type == FAITH_TYPE ? "faith/" : "",
926 sep->se_proto,
927 sep->se_wait, sep->se_service_max, sep->se_user,
928 sep->se_group, (long)sep->se_bi, sep->se_server
930 , (sep->se_policy != NULL ? sep->se_policy : "")
939 struct servtab *sep;
941 for (sep = servtab; sep != NULL; sep = sep->se_next) {
942 sep->se_checked = false;
956 struct servtab *sep, **sepp = &servtab;
958 while ((sep = *sepp) != NULL) {
959 if (sep->se_checked) {
960 sepp = &sep->se_next;
964 *sepp = sep->se_next;
965 if (sep->se_fd >= 0)
966 close_sep(sep);
967 if (isrpcservice(sep))
968 unregister_rpc(sep);
969 if (sep->se_family == AF_LOCAL)
970 (void)unlink(sep->se_service);
973 print_service("FREE", sep);
975 freeconfig(sep);
976 free(sep);
982 is_same_service(const struct servtab *sep, const struct servtab *cp)
985 strcmp(sep->se_service, cp->se_service) == 0 &&
986 strcmp(sep->se_hostaddr, cp->se_hostaddr) == 0 &&
987 strcmp(sep->se_proto, cp->se_proto) == 0 &&
988 sep->se_family == cp->se_family &&
989 ISMUX(sep) == ISMUX(cp);
993 parse_protocol(struct servtab *sep)
997 if (strcmp(sep->se_proto, "unix") == 0) {
998 sep->se_family = AF_LOCAL;
1000 val = (int)strlen(sep->se_proto);
1003 sep->se_service);
1006 val = sep->se_proto[val - 1];
1009 sep->se_family = AF_INET;
1013 sep->se_family = AF_INET6;
1021 sep->se_family = AF_INET;
1024 if (strncmp(sep->se_proto, "rpc/", 4) == 0) {
1027 cp1 = strchr(sep->se_service, '/');
1030 sep->se_service);
1034 sep->se_rpcversl = sep->se_rpcversh =
1039 sep->se_service, cp1);
1044 sep->se_rpcversh = (int)strtol(cp1, &ccp, 0);
1050 sep->se_service);
1059 parse_wait(struct servtab *sep, int wait)
1061 if (!ISMUX(sep)) {
1062 sep->se_wait = wait;
1069 sep->se_wait = 0;
1071 if (strncmp(sep->se_proto, "tcp", 3)) {
1073 sep->se_service);
1076 if (sep->se_socktype != SOCK_STREAM) {
1078 sep->se_service);
1085 parse_server(struct servtab *sep, const char *arg)
1087 sep->se_server = newstr(arg);
1088 if (strcmp(sep->se_server, "internal") != 0) {
1089 sep->se_bi = NULL;
1093 if (!try_biltin(sep)) {
1094 ERR("Internal service %s unknown", sep->se_service);
1102 parse_accept_filter(char *arg, struct servtab *sep)
1111 sep->se_socktype = -1;
1116 strlcpy(sep->se_accf.af_name, accf, sizeof(sep->se_accf.af_name));
1122 sep->se_socktype = -1;
1125 strlcpy(sep->se_accf.af_arg, accf_arg,
1126 sizeof(sep->se_accf.af_arg));
1131 parse_socktype(char* arg, struct servtab* sep)
1135 sep->se_socktype = SOCK_STREAM;
1137 sep->se_socktype = SOCK_DGRAM;
1139 sep->se_socktype = SOCK_RDM;
1141 sep->se_socktype = SOCK_SEQPACKET;
1143 sep->se_socktype = SOCK_RAW;
1145 sep->se_socktype = -1;