Commit | Line | Data |
---|---|---|
805e021f CE |
1 | /* |
2 | * Copyright 2000, International Business Machines Corporation and others. | |
3 | * All Rights Reserved. | |
4 | * | |
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 | |
8 | */ | |
9 | ||
10 | #include "ptint.h" | |
11 | ||
12 | /* A sanitized version of a routine prototyped in ptint.h. The implementation | |
13 | * is in ptuser.c, but putting the declaration in ptuser.h breaks things. */ | |
14 | extern int string_PR_IDToName(struct ubik_client *client, afs_int32 flags, | |
15 | idlist *ids, namelist *names) AFS_NONNULL(); | |
16 | ||
17 | #define PRSRV 73 | |
18 | ||
19 | #define ENTRYSIZE 192 | |
20 | #define HASHSIZE 8191 | |
21 | ||
22 | #define PRBADID 0x80000000 | |
23 | ||
24 | #define SYSVIEWERID -203 | |
25 | #define SYSADMINID -204 | |
26 | #define SYSBACKUPID -205 | |
27 | #define ANYUSERID -101 | |
28 | #define AUTHUSERID -102 | |
29 | #define ANONYMOUSID 32766 | |
30 | ||
31 | #define PRDBVERSION 0 | |
32 | ||
33 | struct prheader { | |
34 | afs_int32 version; /* database version number */ | |
35 | afs_int32 headerSize; /* bytes in header (almost version#) */ | |
36 | afs_int32 freePtr; /* first free entry in freelist */ | |
37 | afs_int32 eofPtr; /* first free byte in file */ | |
38 | afs_int32 maxGroup; /* most negative group id */ | |
39 | afs_int32 maxID; /* largest user id allocated */ | |
40 | afs_int32 maxForeign; /* largest foreign id allocated */ | |
41 | afs_int32 maxInst; /* largest sub/super id allocated */ | |
42 | afs_int32 orphan; /* groups owned by deleted users */ | |
43 | afs_int32 usercount; /* num users in system */ | |
44 | afs_int32 groupcount; /* num groups in system */ | |
45 | afs_int32 foreigncount; /* num registered foreign users NYI */ | |
46 | afs_int32 instcount; /* number of sub and super users NYI */ | |
47 | afs_int32 reserved[5]; /* just in case */ | |
48 | afs_int32 nameHash[HASHSIZE]; /* hash table for names */ | |
49 | afs_int32 idHash[HASHSIZE]; /* hash table for ids */ | |
50 | }; | |
51 | ||
52 | extern struct prheader cheader; | |
53 | ||
54 | #define set_header_word(tt,field,value) \ | |
55 | pr_Write ((tt), 0, ((char *)&(cheader.field) - (char *)&cheader), \ | |
56 | ((cheader.field = (value)), (char *)&(cheader.field)), \ | |
57 | sizeof(afs_int32)) | |
58 | ||
59 | #define inc_header_word(tt,field,inc) \ | |
60 | pr_Write ((tt), 0, ((char *)&(cheader.field) - (char *)&cheader), \ | |
61 | ((cheader.field = (htonl(ntohl(cheader.field)+(inc)))), \ | |
62 | (char *)&(cheader.field)), \ | |
63 | sizeof(afs_int32)) | |
64 | ||
65 | #define PRFREE 1 /* 1 if in free list */ | |
66 | #define PRGRP 2 /* 1 if a group entry */ | |
67 | #define PRCONT 4 /* 1 if an extension block */ | |
68 | #define PRCELL 8 /* 1 if cell entry */ | |
69 | #define PRFOREIGN 16 /* 1 if foreign user */ | |
70 | #define PRINST 32 /* 1 if sub/super instance */ | |
71 | ||
72 | #define PRTYPE 0x3f /* type bits: only one should be set */ | |
73 | #define PRUSER 0 /* all type bits 0 => user entry */ | |
74 | ||
75 | #define PRACCESS (1<<6) /* access checking enabled */ | |
76 | #define PRQUOTA (1<<7) /* group creation quota checking on */ | |
77 | ||
78 | /* define the access bits for entries, they are stored in the left half of the | |
79 | * entry's flags. The SetFields interface takes them in the right half. There | |
80 | * are eight bits altogether defining access rights for status, owned, member, | |
81 | * add, and remove operations. For rights with two bits the values are defined | |
82 | * to be o=00, m=01, a=10, with 11 reserved. As implemented, however, it is | |
83 | * o=00, m=01, a=1x. */ | |
84 | #define PRIVATE_SHIFT 16 /* move privacy bits to left half of flags */ | |
85 | #define PRP_STATUS_ANY (0x80 << PRIVATE_SHIFT) | |
86 | #define PRP_STATUS_MEM (0x40 << PRIVATE_SHIFT) | |
87 | #define PRP_OWNED_ANY (0x20 << PRIVATE_SHIFT) | |
88 | #define PRP_MEMBER_ANY (0x10 << PRIVATE_SHIFT) | |
89 | #define PRP_MEMBER_MEM (0x08 << PRIVATE_SHIFT) | |
90 | #define PRP_ADD_ANY (0x04 << PRIVATE_SHIFT) | |
91 | #define PRP_ADD_MEM (0x02 << PRIVATE_SHIFT) | |
92 | #define PRP_REMOVE_MEM (0x01 << PRIVATE_SHIFT) | |
93 | ||
94 | #define PRP_GROUP_DEFAULT (PRP_STATUS_ANY | PRP_MEMBER_ANY) | |
95 | #define PRP_USER_DEFAULT (PRP_STATUS_ANY) | |
96 | ||
97 | struct prentry { | |
98 | afs_int32 flags; /* random flags */ | |
99 | afs_int32 id; /* user or group id */ | |
100 | afs_int32 cellid; /* A foreign users's repsenting group */ | |
101 | afs_int32 next; /* next block same entry (or freelist) */ | |
102 | afs_uint32 createTime, addTime, removeTime, changeTime; | |
103 | afs_int32 reserved[1]; | |
104 | afs_int32 entries[PRSIZE]; /* groups a user is a member of (or list of members */ | |
105 | afs_int32 nextID; /* id hash table next pointer */ | |
106 | afs_int32 nextName; /* name has table next ptr */ | |
107 | afs_int32 owner; /* id of owner of entry */ | |
108 | afs_int32 creator; /* may differ from owner */ | |
109 | afs_int32 ngroups; /* number of groups this user has created | |
110 | * -- 0 for reg group entries | |
111 | * -- number of foreign users if foreign group */ | |
112 | afs_int32 nusers; /* Users added to foreign group */ | |
113 | afs_int32 count; /* number of members/groups for this group/user */ | |
114 | afs_int32 instance; /* number of sub/super instances for this user NYI */ | |
115 | afs_int32 owned; /* chain of groups owned by this entry */ | |
116 | afs_int32 nextOwned; /* chain of groups for owner of this entry */ | |
117 | afs_int32 parent; /* ptr to super instance NYI */ | |
118 | afs_int32 sibling; /* ptr to sibling instance NYI */ | |
119 | afs_int32 child; /* ptr to first child NYI */ | |
120 | char name[PR_MAXNAMELEN]; /* user or group name */ | |
121 | }; | |
122 | ||
123 | #if defined(SUPERGROUPS) | |
124 | ||
125 | struct prentryg { | |
126 | afs_int32 flags; /* random flags */ | |
127 | afs_int32 id; /* user or group id */ | |
128 | afs_int32 cellid; /* reserved for cellID */ | |
129 | afs_int32 next; /* next block same entry (or freelist) */ | |
130 | afs_uint32 createTime, addTime, removeTime, changeTime; | |
131 | afs_int32 reserved[1]; | |
132 | afs_int32 entries[PRSIZE]; /* groups a user is a member of (or list of members */ | |
133 | afs_int32 nextID; /* id hash table next pointer */ | |
134 | afs_int32 nextName; /* name has table next ptr */ | |
135 | afs_int32 owner; /* id of owner of entry */ | |
136 | afs_int32 creator; /* may differ from owner */ | |
137 | afs_int32 ngroups; /* number of groups this user has created - 0 for group entries */ | |
138 | afs_int32 nusers; /* number of foreign user entries this user has created - 0 for group entries NYI */ | |
139 | afs_int32 count; /* number of members/groups for this group/user */ | |
140 | afs_int32 countsg; /* number of supergroups for this group */ | |
141 | afs_int32 owned; /* chain of groups owned by this entry */ | |
142 | afs_int32 nextOwned; /* chain of groups for owner of this entry */ | |
143 | afs_int32 nextsg; /* next block same entry for supergroups */ | |
144 | #define SGSIZE 2 /* number of supergroup entries */ | |
145 | afs_int32 supergroup[SGSIZE]; /* supergroups this group belongs to */ | |
146 | char name[PR_MAXNAMELEN]; /* user or group name */ | |
147 | }; | |
148 | ||
149 | #endif /* SUPERGROUPS */ | |
150 | ||
151 | struct contentry { /* continuation of entry */ | |
152 | afs_int32 flags; | |
153 | afs_int32 id; | |
154 | afs_int32 cellid; | |
155 | afs_int32 next; | |
156 | afs_int32 reserved[5]; | |
157 | afs_int32 entries[COSIZE]; | |
158 | }; | |
159 | ||
160 | /* The following are flags for PR_ListEntries() */ | |
161 | #define PRUSERS 0x1 | |
162 | #define PRGROUPS 0x2 |