summaryrefslogtreecommitdiff
path: root/nis/nss_nisplus
diff options
context:
space:
mode:
Diffstat (limited to 'nis/nss_nisplus')
-rw-r--r--nis/nss_nisplus/nisplus-alias.c13
-rw-r--r--nis/nss_nisplus/nisplus-hosts.c9
-rw-r--r--nis/nss_nisplus/nisplus-network.c85
-rw-r--r--nis/nss_nisplus/nisplus-proto.c6
-rw-r--r--nis/nss_nisplus/nisplus-rpc.c19
-rw-r--r--nis/nss_nisplus/nisplus-service.c6
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