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