1 /*                                   PROTECTION SETUP FILE
2 
3  */
4 
5 #ifndef HTAAPROT_H
6 #define HTAAPROT_H
7 
8 #include <HTGroup.h>
9 #include <HTAssoc.h>
10 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 /*
15 
16 Server's Representation of Document (Tree) Protections
17 
18  */ typedef struct {
19 	char *ctemplate;	/* Template for this protection         */
20 	char *filename;		/* Current document file                */
21 	char *uid_name;		/* Effective uid (name of it)           */
22 	char *gid_name;		/* Effective gid (name of it)           */
23 	GroupDef *mask_group;	/* Allowed users and IP addresses       */
24 	HTList *valid_schemes;	/* Valid authentication schemes         */
25 	HTAssocList *values;	/* Association list for scheme specific */
26 	/* parameters.                          */
27     } HTAAProt;
28 
29 /*
30 
31 Callbacks for rule system
32 
33    The following three functioncs are called by the rule system:
34 
35       HTAA_clearProtections() when starting to translate a filename
36 
37       HTAA_setDefaultProtection() when "defprot" rule is matched
38 
39       HTAA_setCurrentProtection() when "protect" rule is matched
40 
41    Protection setup files are cached by these functions.
42 
43  */
44 
45 /* PUBLIC                                       HTAA_setDefaultProtection()
46  *              SET THE DEFAULT PROTECTION MODE
47  *              (called by rule system when a
48  *              "defprot" rule is matched)
49  * ON ENTRY:
50  *      cur_docname     is the current result of rule translations.
51  *      prot_filename   is the protection setup file (second argument
52  *                      for "defprot" rule, optional)
53  *      eff_ids         contains user and group names separated by
54  *                      a dot, corresponding to the effective uid
55  *                      gid under which the server should run,
56  *                      default is "nobody.nogroup" (third argument
57  *                      for "defprot" rule, optional; can be given
58  *                      only if protection setup file is also given).
59  *
60  * ON EXIT:
61  *      returns         nothing.
62  *                      Sets the module-wide variable default_prot.
63  */
64     extern void HTAA_setDefaultProtection(const char *cur_docname,
65 					  const char *prot_filename,
66 					  const char *eff_ids);
67 
68 /* PUBLIC                                       HTAA_setCurrentProtection()
69  *              SET THE CURRENT PROTECTION MODE
70  *              (called by rule system when a
71  *              "protect" rule is matched)
72  * ON ENTRY:
73  *      cur_docname     is the current result of rule translations.
74  *      prot_filename   is the protection setup file (second argument
75  *                      for "protect" rule, optional)
76  *      eff_ids         contains user and group names separated by
77  *                      a dot, corresponding to the effective uid
78  *                      gid under which the server should run,
79  *                      default is "nobody.nogroup" (third argument
80  *                      for "protect" rule, optional; can be given
81  *                      only if protection setup file is also given).
82  *
83  * ON EXIT:
84  *      returns         nothing.
85  *                      Sets the module-wide variable current_prot.
86  */
87     extern void HTAA_setCurrentProtection(const char *cur_docname,
88 					  const char *prot_filename,
89 					  const char *eff_ids);
90 
91 /* SERVER INTERNAL                                      HTAA_clearProtections()
92  *              CLEAR DOCUMENT PROTECTION MODE
93  *              (ALSO DEFAULT PROTECTION)
94  *              (called by the rule system)
95  * ON ENTRY:
96  *      No arguments.
97  *
98  * ON EXIT:
99  *      returns nothing.
100  *              Frees the memory used by protection information.
101  */
102     extern void HTAA_clearProtections(void);
103 
104 /*
105 
106 Getting Protection Settings
107 
108       HTAA_getCurrentProtection() returns the current protection mode (if there was a
109       "protect" rule). NULL, if no "protect" rule has been matched.
110 
111       HTAA_getDefaultProtection() sets the current protection mode to what it was set to
112       by "defprot" rule and also returns it (therefore after this call also
113       HTAA_getCurrentProtection() returns the same structure.
114 
115  */
116 
117 /* PUBLIC                                       HTAA_getCurrentProtection()
118  *              GET CURRENT PROTECTION SETUP STRUCTURE
119  *              (this is set up by callbacks made from
120  *               the rule system when matching "protect"
121  *               (and "defprot") rules)
122  * ON ENTRY:
123  *      HTTranslate() must have been called before calling
124  *      this function.
125  *
126  * ON EXIT:
127  *      returns a HTAAProt structure representing the
128  *              protection setup of the HTTranslate()'d file.
129  *              This must not be free()'d.
130  */
131     extern HTAAProt *HTAA_getCurrentProtection(void);
132 
133 /* PUBLIC                                       HTAA_getDefaultProtection()
134  *              GET DEFAULT PROTECTION SETUP STRUCTURE
135  *              (this is set up by callbacks made from
136  *               the rule system when matching "defprot"
137  *               rules)
138  * ON ENTRY:
139  *      HTTranslate() must have been called before calling
140  *      this function.
141  *
142  * ON EXIT:
143  *      returns a HTAAProt structure representing the
144  *              default protection setup of the HTTranslate()'d
145  *              file (if HTAA_getCurrentProtection() returned
146  *              NULL, i.e., if there is no "protect" rule
147  *              but ACL exists, and we need to know default
148  *              protection settings).
149  *              This must not be free()'d.
150  */
151     extern HTAAProt *HTAA_getDefaultProtection(void);
152 
153 /*
154 
155 Get User and Group IDs to Which Set to
156 
157  */
158 
159 #ifndef NOUSERS
160 /* PUBLIC                                                       HTAA_getUid()
161  *              GET THE USER ID TO CHANGE THE PROCESS UID TO
162  * ON ENTRY:
163  *      No arguments.
164  *
165  * ON EXIT:
166  *      returns the uid number to give to setuid() system call.
167  *              Default is 65534 (nobody).
168  */
169     extern int HTAA_getUid(void);
170 
171 /* PUBLIC                                                       HTAA_getGid()
172  *              GET THE GROUP ID TO CHANGE THE PROCESS GID TO
173  * ON ENTRY:
174  *      No arguments.
175  *
176  * ON EXIT:
177  *      returns the uid number to give to setgid() system call.
178  *              Default is 65534 (nogroup).
179  */
180     extern int HTAA_getGid(void);
181 #endif				/* !NOUSERS */
182 
183 /* PUBLIC                                                       HTAA_UidToName
184  *              GET THE USER NAME
185  * ON ENTRY:
186  *      The user-id
187  *
188  * ON EXIT:
189  *      returns the user name
190  */
191     extern const char *HTAA_UidToName(int uid);
192 
193 /* PUBLIC                                                       HTAA_NameToUid
194  *              GET THE USER ID
195  * ON ENTRY:
196  *      The user-name
197  *
198  * ON EXIT:
199  *      returns the user id
200  */
201     extern int HTAA_NameToUid(const char *name);
202 
203 /* PUBLIC                                                       HTAA_GidToName
204  *              GET THE GROUP NAME
205  * ON ENTRY:
206  *      The group-id
207  *
208  * ON EXIT:
209  *      returns the group name
210  */
211     extern const char *HTAA_GidToName(int gid);
212 
213 /* PUBLIC                                                       HTAA_NameToGid
214  *              GET THE GROUP ID
215  * ON ENTRY:
216  *      The group-name
217  *
218  * ON EXIT:
219  *      returns the group id
220  */
221     extern int HTAA_NameToGid(const char *name);
222 
223 #ifdef __cplusplus
224 }
225 #endif
226 #endif				/* not HTAAPROT_H */
227