2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
10 #include <afsconfig.h>
11 #include <afs/param.h>
16 #include <sys/types.h>
20 #include <netinet/in.h>
33 #ifdef PR_REMEMBER_TIMES
38 static char *pr_TimeToString (time_t clock)
40 static char buffer[32];
41 static int this_year = 0;
43 if (clock == 0) return "time-not-set ";
46 tm = localtime (&now);
47 this_year = tm->tm_year;
49 tm = localtime(&clock);
50 if (tm->tm_year != this_year)
51 strftime (buffer, 32, "%m/%d/%Y %T", tm);
53 strftime (buffer, 32, "%m/%d %T", tm);
58 #define host(a) (hostOrder ? (a) : ntohl(a))
60 static void PrintEntries (f, hostOrder, indent, e, n)
62 int hostOrder; /* structures in host order */
72 if (e->entries[i] == 0) break;
74 if (i==0) fprintf (f, "%*sids ", indent, "");
75 else if (newline == 0) fprintf (f, "%*s", indent+4, "");
77 if (host(e->entries[i]) == PRBADID) fprintf (f, " EMPTY");
78 else fprintf (f, "%6d", host(e->entries[i]));
84 else fprintf (f, " ");
86 if (newline) fprintf (f, "\n");
89 int pr_PrintEntry (f, hostOrder, ea, e, indent)
91 int hostOrder; /* structures in host order */
98 if (e->cellid) fprintf (f, "cellid == %d\n", host(e->cellid));
99 for (i=0; i<sizeof(e->reserved)/sizeof(e->reserved[0]); i++)
101 fprintf (f, "reserved field [%d] not zero: %d\n",
102 i, host(e->reserved[i]));
104 fprintf (f, "%*s", indent, "");
105 fprintf (f, "Entry at %d: flags 0x%x, id %di, next %d.\n",
106 ea, host(e->flags), host(e->id), host(e->next));
107 #ifdef PR_REMEMBER_TIMES
108 fprintf (f, "%*s", indent, "");
109 fprintf (f, "c:%s ", pr_TimeToString(host(e->createTime)));
110 fprintf (f, "a:%s ", pr_TimeToString(host(e->addTime)));
111 fprintf (f, "r:%s ", pr_TimeToString(host(e->removeTime)));
112 fprintf (f, "n:%s\n", pr_TimeToString(host(e->changeTime)));
114 if (host(e->flags) & PRCONT)
115 PrintEntries (f, hostOrder, indent, e, COSIZE);
116 else { /* regular entry */
117 PrintEntries (f, hostOrder, indent, e, PRSIZE);
118 fprintf (f, "%*s", indent, "");
119 fprintf (f, "hash (id %d name %d). Owner %di, creator %di\n",
120 host(e->nextID), host(e->nextName),
121 host(e->owner), host(e->creator));
122 fprintf (f, "%*s", indent, "");
123 #if defined(SUPERGROUPS)
124 fprintf (f, "quota groups %d, foreign users %d. Mem: %d, cntsg: %d\n",
125 host(e->ngroups), host(e->nusers),
126 host(e->count), host(e->instance));
128 fprintf (f, "quota groups %d, foreign users %d. Mem: %d, inst: %d\n",
129 host(e->ngroups), host(e->nusers),
130 host(e->count), host(e->instance));
132 fprintf (f, "%*s", indent, "");
133 #if defined(SUPERGROUPS)
134 fprintf (f, "Owned chain %d, next owned %d, nextsg %d, sg (%d %d).\n",
135 host(e->owned), host(e->nextOwned),
136 host(e->parent), host(e->sibling), host(e->child));
138 fprintf (f, "Owned chain %d, next owned %d, inst ptrs(%d %d %d).\n",
139 host(e->owned), host(e->nextOwned),
140 host(e->parent), host(e->sibling), host(e->child));
142 fprintf (f, "%*s", indent, "");
143 if (strlen (e->name) >= PR_MAXNAMELEN)
144 fprintf (f, "NAME TOO LONG: ");
145 fprintf (f, "Name is '%.*s'\n", PR_MAXNAMELEN, e->name);