summaryrefslogtreecommitdiff
path: root/nis/nis_table.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1998-04-03 12:19:27 +0000
committerUlrich Drepper <drepper@redhat.com>1998-04-03 12:19:27 +0000
commit6f0ee4628f3075ed37481d2bdb573b6d52d9e25e (patch)
tree8be4c9e5be30f097b88dec0601d3a7d804c97cbc /nis/nis_table.c
parentecdd1a316035312a0565a64011520819ff36ae11 (diff)
downloadglibc-6f0ee4628f3075ed37481d2bdb573b6d52d9e25e.tar.gz
Update.
1998-04-03 Thorsten Kukuk <kukuk@vt.uni-paderborn.de> * nis/nis_table.c (nis_list): Fix FOLLOW_PATH and ALL_RESULTS flags.
Diffstat (limited to 'nis/nis_table.c')
-rw-r--r--nis/nis_table.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/nis/nis_table.c b/nis/nis_table.c
index d2a1df76b2..084ce68193 100644
--- a/nis/nis_table.c
+++ b/nis/nis_table.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.
@@ -202,10 +202,10 @@ nis_list (const_nis_name name, u_long flags,
cb = NULL;
- if (flags & FOLLOW_PATH)
+ if (flags & FOLLOW_PATH || flags & ALL_RESULTS)
{
nis_result *lres;
- u_long newflags = flags & ~FOLLOW_PATH;
+ u_long newflags = flags & ~FOLLOW_PATH & ~ALL_RESULTS;
char table_path[NIS_MAXPATH + 1];
char *ntable, *p;
u_long done = 0, failures = 0;
@@ -237,13 +237,30 @@ nis_list (const_nis_name name, u_long flags,
NIS_RES_OBJECT (lres)->TA_data.ta_path);
nis_freeresult (lres);
free (res);
+ res = NULL;
p = table_path;
while (((ntable = strsep (&p, ":")) != NULL) && !done)
{
+ char *c;
+
+ if (res != NULL)
+ nis_freeresult (res);
+
/* Do the job recursive here! */
- res = nis_list (name, newflags, callback, userdata);
+ if ((c = strchr(name, ']')) != NULL)
+ {
+ /* Have indexed name ! */
+ int index_len = c - name + 2;
+ char buf[index_len + strlen (ntable) + 1];
+
+ c = __stpncpy (buf, name, index_len);
+ strcpy (c, ntable);
+ res = nis_list (buf, newflags, callback,userdata);
+ }
+ else
+ res = nis_list (ntable, newflags, callback, userdata);
if (res == NULL)
return NULL;
switch (res->status)
@@ -253,13 +270,16 @@ nis_list (const_nis_name name, u_long flags,
if (!(flags & ALL_RESULTS))
done = 1;
break;
+ case NIS_PARTIAL: /* The table is correct, we doesn't found
+ the entry */
+ break;
default:
if (flags & ALL_RESULTS)
- failures++;
+ ++failures;
else
done = 1;
break;
- }
+ }
}
if (res->status == NIS_SUCCESS && failures)
res->status = NIS_S_SUCCESS;