From owner-p4-projects@FreeBSD.ORG Sat Jul 2 13:06:15 2005 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id E321616A420; Sat, 2 Jul 2005 13:06:14 +0000 (GMT) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 8EF2416A41C for ; Sat, 2 Jul 2005 13:06:14 +0000 (GMT) (envelope-from soc-bushman@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 6486B43D1F for ; Sat, 2 Jul 2005 13:06:14 +0000 (GMT) (envelope-from soc-bushman@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id j62D6EmN089209 for ; Sat, 2 Jul 2005 13:06:14 GMT (envelope-from soc-bushman@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id j62D6E9U089205 for perforce@freebsd.org; Sat, 2 Jul 2005 13:06:14 GMT (envelope-from soc-bushman@freebsd.org) Date: Sat, 2 Jul 2005 13:06:14 GMT Message-Id: <200507021306.j62D6E9U089205@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to soc-bushman@freebsd.org using -f From: soc-bushman To: Perforce Change Reviews Cc: Subject: PERFORCE change 79429 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 02 Jul 2005 13:06:15 -0000 http://perforce.freebsd.org/chv.cgi?CH=79429 Change 79429 by soc-bushman@soc-bushman_stinger on 2005/07/02 13:06:10 testing program added - still completely not finished Affected files ... .. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/getservbyname.c#3 edit .. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/getservbyport.c#3 edit .. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/getservent.c#3 edit .. //depot/projects/soc2005/nsswitch_cached/tests/getservent/getservent.c#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/getservent/libc_private.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/getservent/namespace.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/getservent/netdb_private.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/getservent/nss_tls.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/getservent/reentrant.h#1 add .. //depot/projects/soc2005/nsswitch_cached/tests/getservent/un-namespace.h#1 add Differences ... ==== //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/getservbyname.c#3 (text+ko) ==== ==== //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/getservbyport.c#3 (text+ko) ==== ==== //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/getservent.c#3 (text+ko) ==== @@ -54,6 +54,777 @@ #include "un-namespace.h" #include "netdb_private.h" +/* nsswitch part - begin */ +#include "libc_private.h" +#include "nss_tls.h" +#include +#include +/* nsswitch part - end */ + +/* nsswitch part - begin */ + +// I guess, we'd better send this structure as the sequence of function arguments +/*static struct servent_data +{ +// char *aliases[_MAXALIASES]; +// char line[_MAXLINELEN + 1]; + char **aliases; + size_t aliases_size; + + char * buffer; + size_t buffer_size; +};*/ + +static const ns_src defaultsrc[] = { + { NSSRC_COMPAT, NS_SUCCESS }, + { NULL, 0 } +}; + +static int servent_unpack(char *, struct servent *, char **, size_t); +static void servent_init(struct servent *); + +struct files_state +{ + FILE *fp; + int stayopen; +}; +static void files_endstate(void *); +NSS_TLS_HANDLING(files); + +static int files_servent(void *, void *, va_list); +static int files_setservent(void *, void *, va_list); +static int files_endservent(void *, void *, va_list); +static void files_setent(int, struct files_state *); +static void files_endent(struct files_state *); + +#ifdef YP +static int nis_getservbyname_r(void *, void *, va_list); +static int nis_getservbyport_t(void *, void *, va_list); +static int nis_getservent_r(void *, void *, va_list); +static int nis_setservent(void *, void *, va_list); +static int nis_endservent(void *, void *, va_list); + +struct nis_state +{ + /* this specification is not finished */ + int yp_stepping; +// char *yp_name; +// char *yp_proto; +// int yp_port; + char *yp_domain; + char *yp_key; + int yp_keylen; +}; +static void nis_endstate(void *); +NSS_TLS_HANDLING(nis); + +#endif + +struct compat_state +{ + FILE *fp; + int stayopen; +/* char *name; + enum _compat { + COMPAT_MODE_OFF = 0, + COMPAT_MODE_ALL, + COMPAT_MODE_NAME + } compat;*/ +}; +//static void compat_endstate(void *); +//NSS_TLS_HANDLING(compat); + +/* nsswitch part - end */ + +static int +servent_unpack(char *p, struct servent * serv, char ** aliases, size_t aliases_size) +{ + char *cp, **q, *endp; + long l; + + if (*p == '#') + return -1; + cp = strpbrk(p, "#\n"); + if (cp != NULL) + *cp = '\0'; + serv->s_name = p; + p = strpbrk(p, " \t"); + if (p == NULL) + return -1; + *p++ = '\0'; + while (*p == ' ' || *p == '\t') + p++; + cp = strpbrk(p, ",/"); + if (cp == NULL) + return -1; + *cp++ = '\0'; + l = strtol(p, &endp, 10); + if (endp == p || *endp != '\0' || l < 0 || l > USHRT_MAX) + return -1; + serv->s_port = htons((in_port_t)l); + serv->s_proto = cp; + q = serv->s_aliases = aliases; + cp = strpbrk(cp, " \t"); + if (cp != NULL) + *cp++ = '\0'; + while (cp && *cp) { + if (*cp == ' ' || *cp == '\t') { + cp++; + continue; + } + if (q < &aliases[_MAXALIASES - 1]) { + *q++ = cp; + *q++ = '\0'; // my hack - should work - but will left the buffer in mess after the ending 0 + } + cp = strpbrk(cp, " \t"); + if (cp != NULL) + *cp++ = '\0'; + } + *q = NULL; + + return 0; +} + +static void +servent_init(struct servent * serv) +{ +} + +#define SERVENT_BUFFER_UNPACK(buffer, buffer_size, line, line_size, aliases) \ + aliases=(char **)(_ALIGN((char **)buffer)); \ + line=(char *)aliases+sizeof(char *)*_MAXALIASES; \ + if (line>buffer+buffer_size) \ + return (NS_UNAVAIL); \ + line_size=buffer+buffer_size-line; \ + if (line_size<_MAXLINELEN+1) \ + return (NS_TRYAGAIN); + /* TODO - must check the alignment here */ + +#define SERVENT_BUFFER_SIZE sizeof(char*)*_MAXALIASES+_ALIGNBYTES+_MAXLINELEN + +/* files backend implementation - begin */ +static void +files_endstate(void *p) +{ + FILE * f; + + if (p == NULL) + return; + + f = ((struct files_state *)p)->fp; + if (f != NULL) + fclose(f); + + free(p); +} + +//struct servent * serv, char * buffer, size_t buffer_size, int * errnop, struct files_state * st +static int +files_servent(void * retval, void *mdata, va_list ap) +{ + struct files_state * st; + int rv; + int stayopen; + + enum nss_lookup_type how; + char * name; + char * proto; + int port; + + struct servent * serv; + char * buffer; + size_t buffer_size; + int * errnop; + + char **aliases; + char * line; + size_t line_size; + + char *p; + char **cp;//, **q, *endp; +// long l; + + rv = files_getstate(&st); + if (rv != 0) + return (NS_UNAVAIL); + + SERVENT_BUFFER_UNPACK(buffer, buffer_size,line,line_size,aliases) +/* aliases=_ALIGN((char **)buffer); + line=aliases+sizeof(char *)*_MAXALIASES; + if (line>=buffer+buffer_size) + return (NS_TRYAGAIN); + line_size=buffer+buffer_size-line; + + if (line_size<_MAXLINELEN+1) + return (NS_TRYAGAIN);*/ + + name = NULL; + proto = NULL; + how = (enum nss_lookup_type)mdata; + switch (how) + { + case nss_lt_name: + name = va_arg(ap, char *); + proto = va_arg(ap, char *); + stayopen=0; + break; + case nss_lt_id: + port = va_arg(ap, int); + proto = va_arg(ap, char *); + stayopen=0; + break; + case nss_lt_all: + stayopen=1; + break; + default: + return NS_NOTFOUND; + }; + + serv = va_arg(ap, struct servent *); + buffer = va_arg(ap, char *); + buffer_size = va_arg(ap, size_t); + errnop = va_arg(ap,int *); + + if (st->fp == NULL && (st->fp = fopen(_PATH_SERVICES, "r")) == NULL) + return (NS_UNAVAIL); + + if (stayopen==1) + files_setent(1,st); + + rv=NS_NOTFOUND; + do { + memset(serv,0,sizeof(*serv)); + *aliases='\0'; + + if ((p = fgets(line,line_size, st->fp)) == NULL) { + rv=(NS_RETURN); + break; + } + + if (servent_unpack(p,serv,aliases,_MAXALIASES) == -1) + continue; +/* if (*p == '#') + continue; + cp = strpbrk(p, "#\n"); + if (cp != NULL) + *cp = '\0'; + serv->s_name = p; + p = strpbrk(p, " \t"); + if (p == NULL) + continue; + *p++ = '\0'; + while (*p == ' ' || *p == '\t') + p++; + cp = strpbrk(p, ",/"); + if (cp == NULL) + continue; + *cp++ = '\0'; + l = strtol(p, &endp, 10); + if (endp == p || *endp != '\0' || l < 0 || l > USHRT_MAX) + continue; + serv->s_port = htons((in_port_t)l); + serv->s_proto = cp; + q = serv->s_aliases = aliases; + cp = strpbrk(cp, " \t"); + if (cp != NULL) + *cp++ = '\0'; + while (cp && *cp) { + if (*cp == ' ' || *cp == '\t') { + cp++; + continue; + } + if (q < &st->aliases[_MAXALIASES - 1]) { + *q++ = cp; + *q++ = '\0'; // my hack - should work - but will left the buffer in mess after the ending 0 + } + cp = strpbrk(cp, " \t"); + if (cp != NULL) + *cp++ = '\0'; + } + *q = NULL; */ + + switch (how) + { + case nss_lt_name: + if (strcmp(name, serv->s_name) == 0) + goto gotname; + for (cp = serv->s_aliases; *cp; cp++) + if (strcmp(name, *cp) == 0) + goto gotname; + + continue; + gotname: + if (proto == 0 || strcmp(serv->s_proto, proto) == 0) + rv=NS_SUCCESS; + break; + case nss_lt_id: + if (port != serv->s_port) + continue; + + if (proto == 0 || strcmp(serv->s_proto, proto) == 0) + rv=NS_SUCCESS; + break; + case nss_lt_all: + rv = (NS_SUCCESS); + break; + }; + + } while (!(rv & NS_TERMINATE)); + + if (stayopen==1) + files_endent(st); + + if (rv==NS_SUCCESS) + *(struct servent **)retval=serv; + + return rv; +} + +static void files_setent(int f, struct files_state * st) +{ +/* struct files_state * st; + int rv; + + rv = files_getstate(&st); + if (rv != 0) + return (NS_UNAVAIL); + */ + if (st->fp == NULL) + st->fp = fopen(_PATH_SERVICES, "r"); + else + rewind(st->fp); + st->stayopen |= f; + + //return (NS_SUCCESS); +} + +static void files_endent(struct files_state * st) +{ +/* struct files_state *st; + int rv; + + rv = files_getstate(&st); + if (rv != 0) + return (NS_UNAVAIL); + */ + st->stayopen = 0; +// return (NS_SUCCESS); +} + +/*static int +files_getservent_r(void * retval, void * mdata, va_list ap) +{ + struct files_state * st; + struct servent * serv; + char * buffer; + size_t buffer_size; + int * errnop; + int rv; + + rv = files_getstate(&st); + if (rv != 0) + return (NS_UNAVAIL); + + serv = va_arg(ap, struct servent *); + buffer = va_arg(ap, char *); + buffer_size = va_arg(ap, size_t); + errnop = va_arg(ap,int *); + + rv=files_servent(se,buffer,buffer_size,errnop); + if (rv==NS_SUCCESS) + *(struct servent **)retval=se; + + return rv; +} */ + + +static int +files_setservent(void * retval, void * mdata, va_list ap) +{ + struct files_state *st; + int rv; + int f; + + f=va_arg(ap,int); + + rv = files_getstate(&st); + if (rv != 0) + return (NS_UNAVAIL); + + files_setent(f,st); + return (NS_SUCCESS); +} + +static int +files_endservent(void * retval, void * mdata, va_list ap) +{ + struct files_state *st; + int rv; + + rv = files_getstate(&st); + if (rv != 0) + return (NS_UNAVAIL); + + files_endent(st); + return (NS_SUCCESS); +} + +/* files backend implementation - end */ + +/* nis backend implementation - begin */ +static void +nis_endstate(void *p) +{ + if (p == NULL) + return; + + free(((struct nis_state *)p)->yp_key); + free(p); +} + +static int +nis_getservbyname_r(void * result, void * mdata, va_list ap) +{ + struct nis_state * ns; + int rv; + + struct servent * serv; + char **aliases; + char * line; + size_t line_size; + + char * name; + char * proto; + char * buffer; + size_t bufsize; + int * errnop; + + char *resultbuf; + int resultbuflen; + char buf[YPMAXRECORD + 2]; + + rv = nis_getstate(&ns); + if (rv != 0) + return (NS_UNAVAIL); + + name = va_arg(ap, char *); + proto = va_arg(ap, char *); + serv = va_arg(ap, struct servent *); + buffer = va_arg(ap, char *); + bufsize = va_arg(ap, size_t); + errnop = va_arg(ap, int *); + + SERVENT_BUFFER_UNPACK(buffer,bufsize,line,line_size,aliases) + + /* TODO: do we need this ? */ +/* if (bufsize < _MAXLINELEN+1) + return (NS_TRYAGAIN);*/ + + if(!ns->yp_domain) { + if(yp_get_default_domain(&ns->yp_domain)) + return (NS_UNAVAIL); + } + + //snprintf(buf, sizeof(buf), "%s/%s", ns->yp_name, ns->yp_proto); + snprintf(buf, sizeof(buf), "%s/%s", name, proto); + +// ns->yp_name = 0; +// ns->yp_proto = NULL; + + if (yp_match(ns->yp_domain, "services.byname", buf, strlen(buf), + &resultbuf, &resultbuflen)) { + return (NS_NOTFOUND); + } + + /* getservent() expects lines terminated with \n -- make it happy */ + //snprintf(sed->line, sizeof sed->line, "%.*s\n", resultbuflen, resultbuf); + snprintf(buffer, bufsize, "%.*s\n", resultbuflen, resultbuf); + rv = (servent_unpack(buffer,serv,aliases,_MAXALIASES)==-1) ? (NS_NOTFOUND) : (NS_SUCCESS); + + free(resultbuf); + return rv; +} + +static int +nis_getservbyport_t(void * result, void * mdata, va_list ap) +{ + struct nis_state * ns; + + struct servent * serv; + char ** aliases; + char * line; + size_t line_size; + + int port; + char * proto; + char * buffer; + size_t bufsize; + int * errnop; + + char *resultbuf; + int resultbuflen; + char buf[YPMAXRECORD + 2]; + int rv; + + rv = nis_getstate(&ns); + if (rv != 0) + return (NS_UNAVAIL); + + port = va_arg(ap, int); + proto = va_arg(ap, char *); + serv = va_arg(ap, struct servent *); + buffer = va_arg(ap, char *); + bufsize = va_arg(ap, size_t); + errnop = va_arg(ap, int *); + + SERVENT_BUFFER_UNPACK(buffer,bufsize,line,line_size,aliases); + + /* TODO - do we need this? */ +// if (bufsize<_MAXLINELEN+1) +// return (NS_TRYAGAIN); + +// snprintf(buf, sizeof(buf), "%d/%s", ntohs(sed->yp_port), +// sed->yp_proto); + snprintf(buf, sizeof(buf), "%d/%s", ntohs(port), + proto); + +// sed->yp_port = 0; +// sed->yp_proto = NULL; + + if (!ns->yp_domain) { + if (yp_get_default_domain(&ns->yp_domain)) + return (NS_UNAVAIL); + } + + /* + * We have to be a little flexible here. Ideally you're supposed + * to have both a services.byname and a services.byport map, but + * some systems have only services.byname. FreeBSD cheats a little + * by putting the services.byport information in the same map as + * services.byname so that either case will work. We allow for both + * possibilities here: if there is no services.byport map, we try + * services.byname instead. + */ + if ((rv = yp_match(ns->yp_domain, "services.byport", buf, strlen(buf), + &resultbuf, &resultbuflen))) { + if (rv == YPERR_MAP) { + if (yp_match(ns->yp_domain, "services.byname", buf, + strlen(buf), &resultbuf, &resultbuflen)) + return(NS_NOTFOUND); + } else + return(NS_NOTFOUND); + } + + snprintf(buffer, bufsize, "%.*s\n", resultbuflen, resultbuf); + rv = (servent_unpack(buffer,serv,aliases,_MAXALIASES)==-1) ? (NS_NOTFOUND) : (NS_SUCCESS); + + free(resultbuf); + return rv; +} + +static int +nis_getservent_r(void * result, void * mdata, va_list ap) +{ + struct nis_state * ns; + + char ** aliases; + char * line; + size_t line_size; + + struct servent * serv; + char * buffer; + size_t bufsize; + int * errnop; + + char *lastkey, *resultbuf; + int resultbuflen; + int rv; + + rv = nis_getstate(&ns); + if (rv != 0) + return (NS_UNAVAIL); + + serv = va_arg(ap, struct servent *); + buffer = va_arg(ap, char *); + bufsize = va_arg(ap, size_t); + errnop = va_arg(ap, int *); + + SERVENT_BUFFER_UNPACK(buffer,bufsize,line,line_size,aliases); + + if (!ns->yp_domain) { + if (yp_get_default_domain(&ns->yp_domain)) + return (NS_UNAVAIL); + } + + do { + memset(serv,0,sizeof(*serv)); + *aliases='\0'; + + if (!ns->yp_stepping) { + free(ns->yp_key); + rv = yp_first(ns->yp_domain, "services.byname", &ns->yp_key, + &ns->yp_keylen, &resultbuf, &resultbuflen); + if (rv) { + ns->yp_stepping = 0; + return(NS_RETURN); + } + ns->yp_stepping = 1; + } else { + lastkey = ns->yp_key; + rv = yp_next(ns->yp_domain, "services.byname", ns->yp_key, + ns->yp_keylen, &ns->yp_key, &ns->yp_keylen, &resultbuf, + &resultbuflen); + free(lastkey); + if (rv) { + ns->yp_stepping = 0; + return (NS_RETURN); + } + } + + snprintf(buffer, bufsize, "%.*s\n", resultbuflen, resultbuf); + rv = (servent_unpack(buffer,serv,aliases,_MAXALIASES)==-1) ? (NS_NOTFOUND) : (NS_SUCCESS); + free(resultbuf); + } while (!(rv & NS_TERMINATE )); + + /* getservent() expects lines terminated with \n -- make it happy */ + return rv == NS_RETURN ? NS_NOTFOUND : rv; +} + +static int +nis_setservent(void *result, void *mdata, va_list ap) +{ + return (NS_SUCCESS); +} + +static int +nis_endservent(void *result, void *mdata, va_list ap) +{ + struct nis_state * ns; + int rv; + + rv = nis_getstate(&ns); + if (rv != 0) + return (NS_UNAVAIL); + + /* these 2 lines possibly should be moved into the function + or nis_endstate should be called */ + free(ns->yp_key); + ns->yp_key = NULL; + + ns->yp_stepping = 0; + ns->yp_domain = NULL; + + return (NS_SUCCESS); +} + +/* nis backend implementation - end */ + +int +my_getservbyname_r(const char * name, const char * proto, + struct servent * serv, char * buffer, size_t bufsize, struct servent ** result) +{ + static const ns_dtab dtab[] = { + { NSSRC_FILES, files_servent, (void *)nss_lt_name }, +//#ifdef YP + //{ NSSRC_NIS, nis_servent, (void *)nss_lt_name }, +//#endif +// { NSSRC_COMPAT, compat_passwd, (void *)nss_lt_all }, + { NULL, NULL, NULL } + }; + int rv, ret_errno; + + servent_init(serv); + ret_errno = 0; + *result = NULL; + rv = nsdispatch(result, dtab, NSDB_SERVICES, "getservbyname_r", defaultsrc, + name, proto, serv, buffer, bufsize, &ret_errno); + if (rv == NS_SUCCESS) + return (0); + else + return (ret_errno); +} + +int +my_getservbyport_r(int port, const char * proto, struct servent * serv, char * buffer, + size_t bufsize, struct servent ** result) +{ + static const ns_dtab dtab[] = { + { NSSRC_FILES, files_servent, (void *)nss_lt_id }, +//#ifdef YP + // { NSSRC_NIS, nis_servent, (void *)nss_lt_id }, +//#endif +// { NSSRC_COMPAT, compat_passwd, (void *)nss_lt_all }, + { NULL, NULL, NULL } + }; + int rv, ret_errno; + + servent_init(serv); + ret_errno = 0; + *result = NULL; + rv = nsdispatch(result, dtab, NSDB_SERVICES, "getservbyport_r", defaultsrc, + port, proto, serv, buffer, bufsize, &ret_errno); + if (rv == NS_SUCCESS) + return (0); + else + return (ret_errno); +} + +int +my_getservent_r(struct servent * serv, char * buffer, size_t bufsize, + struct servent ** result) +{ + static const ns_dtab dtab[] = { + { NSSRC_FILES, files_servent, (void *)nss_lt_id }, +//#ifdef YP +// { NSSRC_NIS, nis_servent, (void *)nss_lt_id }, +//#endif +// { NSSRC_COMPAT, compat_passwd, (void *)nss_lt_all }, + { NULL, NULL, NULL } + }; + int rv, ret_errno; + + servent_init(serv); + ret_errno = 0; + *result = NULL; + rv = nsdispatch(result, dtab, NSDB_SERVICES, "getservent_r", defaultsrc, + serv, buffer, bufsize, &ret_errno); + if (rv == NS_SUCCESS) + return (0); + else + return (ret_errno); +} + +void +my_setservent(int stayopen) +{ + static const ns_dtab dtab[] = { + { NSSRC_FILES, files_setservent, NULL }, +//#ifdef YP +// { NSSRC_NIS, nis_setservent, NULL }, +//#endif +// { NSSRC_COMPAT, compat_passwd, (void *)nss_lt_all }, + { NULL, NULL, NULL } + }; + + (void)nsdispatch(NULL, dtab, NSDB_SERVICES, "setservent", defaultsrc, stayopen); +} + +void +my_endservent() +{ + static const ns_dtab dtab[] = { + { NSSRC_FILES, files_endservent, NULL }, +#ifdef YP + { NSSRC_NIS, nis_endservent, NULL }, +#endif +// { NSSRC_COMPAT, compat_passwd, (void *)nss_lt_all }, + { NULL, NULL, NULL } + }; + + (void) nsdispatch(NULL, dtab, NSDB_SERVICES, "endservent", defaultsrc); +} + +/* static struct servdata servdata; static thread_key_t servdata_key; static once_t servdata_init_once = ONCE_INITIALIZER; @@ -130,7 +901,7 @@ return (0); } - /* + * * We have to be a little flexible here. Ideally you're supposed * to have both a services.byname and a services.byport map, but * some systems have only services.byname. FreeBSD cheats a little @@ -138,7 +909,7 @@ * services.byname so that either case will work. We allow for both * possibilities here: if there is no services.byport map, we try * services.byname instead. - */ + * if ((rv = yp_match(sed->yp_domain, "services.byport", buf, strlen(buf), &result, &resultlen))) { if (rv == YPERR_MAP) { @@ -149,7 +920,7 @@ return(0); } - /* getservent() expects lines terminated with \n -- make it happy */ + // getservent() expects lines terminated with \n -- make it happy snprintf(sed->line, sizeof sed->line, "%.*s\n", resultlen, result); free(result); @@ -178,7 +949,7 @@ return(0); } - /* getservent() expects lines terminated with \n -- make it happy */ + // getservent() expects lines terminated with \n -- make it happy snprintf(sed->line, sizeof sed->line, "%.*s\n", resultlen, result); free(result); @@ -218,7 +989,7 @@ } } - /* getservent() expects lines terminated with \n -- make it happy */ + // getservent() expects lines terminated with \n -- make it happy snprintf(sed->line, sizeof sed->line, "%.*s\n", resultlen, result); free(result); @@ -353,3 +1124,4 @@ return (NULL); return (&sd->serv); } +*/