diff options
Diffstat (limited to 'nis/nss_nisplus')
-rw-r--r-- | nis/nss_nisplus/nisplus-alias.c | 13 | ||||
-rw-r--r-- | nis/nss_nisplus/nisplus-hosts.c | 9 | ||||
-rw-r--r-- | nis/nss_nisplus/nisplus-network.c | 85 | ||||
-rw-r--r-- | nis/nss_nisplus/nisplus-proto.c | 6 | ||||
-rw-r--r-- | nis/nss_nisplus/nisplus-rpc.c | 19 | ||||
-rw-r--r-- | nis/nss_nisplus/nisplus-service.c | 6 |
6 files changed, 76 insertions, 62 deletions
diff --git a/nis/nss_nisplus/nisplus-alias.c b/nis/nss_nisplus/nisplus-alias.c index 732c02dbfa..a189d282ca 100644 --- a/nis/nss_nisplus/nisplus-alias.c +++ b/nis/nss_nisplus/nisplus-alias.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. @@ -93,9 +93,9 @@ _nss_nisplus_parse_aliasent (nis_result *result, unsigned long entry, } else { - strncpy (buffer, NISENTRYVAL (entry, 1, result), - NISENTRYLEN (entry, 1, result)); - buffer[NISENTRYLEN (entry, 1, result)] = '\0'; + cp = __stpncpy (buffer, NISENTRYVAL (entry, 1, result), + NISENTRYLEN (entry, 1, result)); + *cp = '\0'; } if (NISENTRYLEN(entry, 0, result) >= room_left) @@ -105,8 +105,9 @@ _nss_nisplus_parse_aliasent (nis_result *result, unsigned long entry, alias->alias_members_len = 0; *first_unused = '\0'; ++first_unused; - strcpy (first_unused, NISENTRYVAL (entry, 0, result)); - first_unused[NISENTRYLEN (entry, 0, result)] = '\0'; + cp = __stpncpy (first_unused, NISENTRYVAL (entry, 0, result), + NISENTRYLEN (entry, 0, result)); + *cp = '\0'; alias->alias_name = first_unused; /* Terminate the line for any case. */ diff --git a/nis/nss_nisplus/nisplus-hosts.c b/nis/nss_nisplus/nisplus-hosts.c index 3b022b6df7..375315b2ed 100644 --- a/nis/nss_nisplus/nisplus-hosts.c +++ b/nis/nss_nisplus/nisplus-hosts.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. @@ -107,7 +107,7 @@ _nss_nisplus_parse_hostent (nis_result *result, int af, struct hostent *host, p = first_unused; line = p; - for (i = 0; i < result->objects.objects_len; i++) + for (i = 0; i < result->objects.objects_len; ++i) { if (strcmp (NISENTRYVAL (i, 1, result), host->h_name) != 0) { @@ -121,8 +121,9 @@ _nss_nisplus_parse_hostent (nis_result *result, int af, struct hostent *host, room_left -= (NISENTRYLEN (i, 1, result) + 1); } } - ++p; + *p++ = '\0'; first_unused = p; + /* Adjust the pointer so it is aligned for storing pointers. */ first_unused += __alignof__ (char *) - 1; @@ -142,7 +143,7 @@ _nss_nisplus_parse_hostent (nis_result *result, int af, struct hostent *host, { /* Skip leading blanks. */ while (isspace (*line)) - line++; + ++line; if (*line == '\0') break; diff --git a/nis/nss_nisplus/nisplus-network.c b/nis/nss_nisplus/nisplus-network.c index b39a54fe03..f152c49f11 100644 --- a/nis/nss_nisplus/nisplus-network.c +++ b/nis/nss_nisplus/nisplus-network.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. @@ -79,7 +79,7 @@ _nss_nisplus_parse_netent (nis_result *result, struct netent *network, p = first_unused; line = p; - for (i = 0; i < result->objects.objects_len; i++) + for (i = 0; i < result->objects.objects_len; ++i) { if (strcmp (NISENTRYVAL (i, 1, result), network->n_name) != 0) { @@ -93,7 +93,7 @@ _nss_nisplus_parse_netent (nis_result *result, struct netent *network, room_left -= (NISENTRYLEN (i, 1, result) + 1); } } - ++p; + *p++ = '\0'; first_unused = p; /* Adjust the pointer so it is aligned for @@ -106,7 +106,7 @@ _nss_nisplus_parse_netent (nis_result *result, struct netent *network, room_left -= (2 * sizeof (char *)); network->n_aliases[0] = NULL; - i = 0; + i = 0; while (*line != '\0') { /* Skip leading blanks. */ @@ -125,17 +125,14 @@ _nss_nisplus_parse_netent (nis_result *result, struct netent *network, while (*line != '\0' && *line != ' ') ++line; - if (line != network->n_aliases[i]) - { - if (*line != '\0') - { - *line = '\0'; - ++line; - } + if (*line == ' ') + { + *line = '\0'; + ++line; ++i; } else - network->n_aliases[i] = NULL; + network->n_aliases[i+1] = NULL; } return 1; @@ -385,39 +382,57 @@ _nss_nisplus_getnetbyaddr_r (const unsigned long addr, const int type, nis_result *result; char buf[1024 + tablename_len]; struct in_addr in; + char buf2[256]; + int b2len; in = inet_makeaddr (addr, 0); - sprintf (buf, "[addr=%s],%s", inet_ntoa (in), tablename_val); - - result = nis_list (buf, EXPAND_NAME, NULL, NULL); + strcpy (buf2, inet_ntoa (in)); + b2len = strlen (buf2); - retval = niserr2nss (result->status); - if (retval != NSS_STATUS_SUCCESS) + while (1) { - if (retval == NSS_STATUS_TRYAGAIN) + sprintf (buf, "[addr=%s],%s", buf2, tablename_val); + result = nis_list (buf, EXPAND_NAME, NULL, NULL); + + retval = niserr2nss (result->status); + if (retval != NSS_STATUS_SUCCESS) { - *errnop = errno; - *herrnop = NETDB_INTERNAL; + if (buf2[b2len -2] == '.' && buf2[b2len -1] == '0') + { + /* Try again, but with trailing dot(s) + removed (one by one) */ + buf2[b2len - 2] = '\0'; + b2len -= 2; + continue; + } + else + return NSS_STATUS_NOTFOUND; + + if (retval == NSS_STATUS_TRYAGAIN) + { + *errnop = errno; + *herrnop = NETDB_INTERNAL; + } + nis_freeresult (result); + return retval; } - nis_freeresult (result); - return retval; - } - parse_res = _nss_nisplus_parse_netent (result, network, buffer, buflen, - errnop); + parse_res = _nss_nisplus_parse_netent (result, network, buffer, + buflen, errnop); - nis_freeresult (result); + nis_freeresult (result); - if (parse_res > 0) - return NSS_STATUS_SUCCESS; + if (parse_res > 0) + return NSS_STATUS_SUCCESS; - *herrnop = NETDB_INTERNAL; - if (parse_res == -1) - { - *errnop = ERANGE; - return NSS_STATUS_TRYAGAIN; + *herrnop = NETDB_INTERNAL; + if (parse_res == -1) + { + *errnop = ERANGE; + return NSS_STATUS_TRYAGAIN; + } + else + return NSS_STATUS_NOTFOUND; } - else - return NSS_STATUS_NOTFOUND; } } diff --git a/nis/nss_nisplus/nisplus-proto.c b/nis/nss_nisplus/nisplus-proto.c index aa2271c385..d121b2f83c 100644 --- a/nis/nss_nisplus/nisplus-proto.c +++ b/nis/nss_nisplus/nisplus-proto.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. @@ -79,7 +79,7 @@ _nss_nisplus_parse_protoent (nis_result * result, struct protoent *proto, p = first_unused; line = p; - for (i = 0; i < result->objects.objects_len; i++) + for (i = 0; i < result->objects.objects_len; ++i) { if (strcmp (NISENTRYVAL (i, 1, result), proto->p_name) != 0) { @@ -92,7 +92,7 @@ _nss_nisplus_parse_protoent (nis_result * result, struct protoent *proto, room_left -= (NISENTRYLEN (i, 1, result) + 1); } } - ++p; + *p++ = '\0'; first_unused = p; /* Adjust the pointer so it is aligned for diff --git a/nis/nss_nisplus/nisplus-rpc.c b/nis/nss_nisplus/nisplus-rpc.c index 105e80241b..9dc412e581 100644 --- a/nis/nss_nisplus/nisplus-rpc.c +++ b/nis/nss_nisplus/nisplus-rpc.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. @@ -69,13 +69,13 @@ _nss_nisplus_parse_rpcent (nis_result *result, struct rpcent *rpc, NISENTRYLEN (0, 0, result)); first_unused[NISENTRYLEN (0, 0, result)] = '\0'; rpc->r_name = first_unused; - room_left -= strlen (first_unused) + 1; + room_left -= (strlen (first_unused) + 1); first_unused += strlen (first_unused) + 1; rpc->r_number = atoi (NISENTRYVAL (0, 2, result)); p = first_unused; line = p; - for (i = 0; i < result->objects.objects_len; i++) + for (i = 0; i < result->objects.objects_len; ++i) { if (strcmp (NISENTRYVAL (i, 1, result), rpc->r_name) != 0) { @@ -106,7 +106,7 @@ _nss_nisplus_parse_rpcent (nis_result *result, struct rpcent *rpc, { /* Skip leading blanks. */ while (isspace (*line)) - line++; + ++line; if (*line == '\0') break; @@ -120,17 +120,14 @@ _nss_nisplus_parse_rpcent (nis_result *result, struct rpcent *rpc, while (*line != '\0' && *line != ' ') ++line; - if (line != rpc->r_aliases[i]) + if (*line == ' ') { - if (*line != '\0') - { - *line = '\0'; - ++line; - } + *line = '\0'; + ++line; ++i; } else - rpc->r_aliases[i] = NULL; + rpc->r_aliases[i+1] = NULL; } return 1; diff --git a/nis/nss_nisplus/nisplus-service.c b/nis/nss_nisplus/nisplus-service.c index 8f681d3e1c..04fed59808 100644 --- a/nis/nss_nisplus/nisplus-service.c +++ b/nis/nss_nisplus/nisplus-service.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. @@ -84,7 +84,7 @@ _nss_nisplus_parse_servent (nis_result *result, struct servent *serv, p = first_unused; line = p; - for (i = 0; i < result->objects.objects_len; i++) + for (i = 0; i < result->objects.objects_len; ++i) { if (strcmp (NISENTRYVAL (i, 1, result), serv->s_name) != 0) { @@ -97,7 +97,7 @@ _nss_nisplus_parse_servent (nis_result *result, struct servent *serv, room_left -= (NISENTRYLEN (i, 1, result) + 1); } } - ++p; + *p++ = '\0'; first_unused = p; /* Adjust the pointer so it is aligned for |