summaryrefslogtreecommitdiff
path: root/nis/nis_print_group_entry.c
diff options
context:
space:
mode:
Diffstat (limited to 'nis/nis_print_group_entry.c')
-rw-r--r--nis/nis_print_group_entry.c134
1 files changed, 125 insertions, 9 deletions
diff --git a/nis/nis_print_group_entry.c b/nis/nis_print_group_entry.c
index 1063ef8411..fbc9ad11ba 100644
--- a/nis/nis_print_group_entry.c
+++ b/nis/nis_print_group_entry.c
@@ -19,7 +19,6 @@
#include <string.h>
#include <rpcsvc/nis.h>
-#include <rpcsvc/nislib.h>
void
nis_print_group_entry (const_nis_name group)
@@ -29,6 +28,10 @@ nis_print_group_entry (const_nis_name group)
char buf[strlen (group) + 50];
char leafbuf[strlen (group) + 3];
char domainbuf[strlen (group) + 3];
+ unsigned long mem_exp_cnt = 0, mem_imp_cnt = 0, mem_rec_cnt = 0;
+ unsigned long nomem_exp_cnt = 0, nomem_imp_cnt = 0, nomem_rec_cnt = 0;
+ char **mem_exp, **mem_imp, **mem_rec;
+ char **nomem_exp, **nomem_imp, **nomem_rec;
nis_result *res;
char *cp, *cp2;
u_int i;
@@ -41,19 +44,132 @@ nis_print_group_entry (const_nis_name group)
*cp++ = '.';
stpcpy (cp, cp2);
}
- res = nis_lookup (buf, FOLLOW_LINKS|EXPAND_NAME);
+ res = nis_lookup (buf, FOLLOW_LINKS | EXPAND_NAME);
- if (res->status != NIS_SUCCESS && res->status != NIS_S_SUCCESS)
+ if (NIS_RES_STATUS(res) != NIS_SUCCESS)
return;
- if ((res->objects.objects_len != 1) ||
- (res->objects.objects_val[0].zo_data.zo_type != GROUP_OBJ))
+ if ((NIS_RES_NUMOBJ (res) != 1) ||
+ (__type_of (NIS_RES_OBJECT (res)) != NIS_GROUP_OBJ))
return;
+ mem_exp = malloc (sizeof (char *) * NIS_RES_NUMOBJ (res));
+ mem_imp = malloc (sizeof (char *) * NIS_RES_NUMOBJ (res));
+ mem_rec = malloc (sizeof (char *) * NIS_RES_NUMOBJ (res));
+ nomem_exp = malloc (sizeof (char *) * NIS_RES_NUMOBJ (res));
+ nomem_imp = malloc (sizeof (char *) * NIS_RES_NUMOBJ (res));
+ nomem_rec = malloc (sizeof (char *) * NIS_RES_NUMOBJ (res));
+
for (i = 0;
- i < res->objects.objects_val[0].GR_data.gr_members.gr_members_len;
- ++i)
- fprintf (stdout, " %s\n",
- res->objects.objects_val[0].GR_data.gr_members.gr_members_val[i]);
+ i < NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_len; ++i)
+ {
+ char *grmem =
+ NIS_RES_OBJECT (res)->GR_data.gr_members.gr_members_val[i];
+ int neg = grmem[0] == '-';
+
+ switch (grmem[neg])
+ {
+ case '*':
+ if (neg)
+ {
+ nomem_imp[nomem_imp_cnt] = grmem;
+ ++nomem_imp_cnt;
+ }
+ else
+ {
+ mem_imp[mem_imp_cnt] = grmem;
+ ++mem_imp_cnt;
+ }
+ break;
+ case '@':
+ if (neg)
+ {
+ nomem_rec[nomem_rec_cnt] = grmem;
+ ++nomem_rec_cnt;
+ }
+ else
+ {
+ mem_rec[mem_rec_cnt] = grmem;
+ ++mem_rec_cnt;
+ }
+ break;
+ default:
+ if (neg)
+ {
+ nomem_exp[nomem_exp_cnt] = grmem;
+ ++nomem_exp_cnt;
+ }
+ else
+ {
+ mem_exp[mem_exp_cnt] = grmem;
+ ++mem_exp_cnt;
+ }
+ break;
+ }
+ }
+ {
+ char buf[strlen (NIS_RES_OBJECT (res)->zo_domain) + 10];
+ printf (_("Group entry for \"%s.%s\" group:\n"),
+ NIS_RES_OBJECT (res)->zo_name,
+ nis_domain_of_r (NIS_RES_OBJECT (res)->zo_domain,
+ buf, strlen (NIS_RES_OBJECT (res)->zo_domain)
+ + 10));
+ }
+ if (mem_exp_cnt)
+ {
+ fputs (_(" Explicit members:\n"), stdout);
+ for (i = 0; i < mem_exp_cnt; ++i)
+ printf ("\t%s\n", mem_exp[i]);
+ }
+ else
+ fputs (_(" No explicit members\n"), stdout);
+ if (mem_imp_cnt)
+ {
+ fputs (_(" Implicit members:\n"), stdout);
+ for (i = 0; i < mem_imp_cnt; ++i)
+ printf ("\t%s\n", &mem_imp[i][2]);
+ }
+ else
+ fputs (_(" No implicit members\n"), stdout);
+ if (mem_rec_cnt)
+ {
+ fputs (_(" Recursive members:\n"), stdout);
+ for (i = 0; i < mem_rec_cnt; ++i)
+ printf ("\t%s\n", &mem_rec[i][1]);
+ }
+ else
+ fputs (_(" No recursive members\n"), stdout);
+ if (nomem_exp_cnt)
+ {
+ fputs (_(" Explicit nonmembers:\n"), stdout);
+ for (i = 0; i < nomem_exp_cnt; ++i)
+ printf ("\t%s\n", &nomem_exp[i][1]);
+ }
+ else
+ fputs (_(" No explicit nonmembers\n"), stdout);
+ if (nomem_imp_cnt)
+ {
+ fputs (_(" Implicit nonmembers:\n"), stdout);
+ for (i = 0; i < nomem_imp_cnt; ++i)
+ printf ("\t%s\n", &mem_imp[i][3]);
+ }
+ else
+ fputs (_(" No implicit nonmembers\n"), stdout);
+ if (nomem_rec_cnt)
+ {
+ fputs (_(" Explicit nonmembers:\n"), stdout);
+ for (i = 0; i < nomem_rec_cnt; ++i)
+ printf ("\t%s=n", &nomem_rec[i][2]);
+ }
+ else
+ fputs (_(" No recursive nonmembers\n"), stdout);
+
+ free (mem_exp);
+ free (mem_imp);
+ free (mem_rec);
+ free (nomem_exp);
+ free (nomem_imp);
+ free (nomem_rec);
+ nis_freeresult (res);
}
}