backport to buster
[hcoop/debian/openafs.git] / src / ptserver / ptserver.h
CommitLineData
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. */
14extern 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
33struct 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
52extern 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
97struct 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
125struct 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
151struct 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