]>
Commit | Line | Data |
---|---|---|
21e8ec7e | 1 | /* $Header$ |
2 | * | |
3 | * Creates a new sms database | |
4 | * | |
5 | * Copyright 1988 by the Massachusetts Institute of Technology. | |
6 | * For copying and distribution information, please see the file | |
7 | * <mit-copyright.h>. | |
8 | */ | |
9 | ||
10 | #include <mit-copyright.h> | |
11 | #include <stdio.h> | |
12 | #include "../server/query.h" | |
13 | EXEC SQL INCLUDE sqlca; | |
14 | ||
15 | extern char *tables[]; | |
16 | extern struct query Queries2[]; | |
17 | extern int QueryCount2; | |
18 | ||
19 | char *values[] = { "users_id", "mach_id", "clu_id", "list_id", | |
20 | "nfsphys_id", "filsys_id", "strings_id", "dcm_enable", | |
21 | 0 }; | |
22 | ||
23 | struct alias { char *name; | |
24 | char *type; | |
25 | char *trans; | |
26 | } aliases[] = { | |
27 | {"ace_type", "TYPE", "KERBEROS"}, | |
28 | {"ace_type", "TYPE", "LIST"}, | |
29 | {"ace_type", "TYPE", "NONE"}, | |
30 | {"ace_type", "TYPE", "USER"}, | |
31 | {"alias", "TYPE", "FILESYS"}, | |
32 | {"alias", "TYPE", "PALLADIUM"}, | |
33 | {"alias", "TYPE", "TYPE"}, | |
34 | {"alias", "TYPE", "SERVICE"}, | |
35 | {"alias", "TYPE", "TYPEDATA"}, | |
36 | {"alias", "TYPE", "VALUE"}, | |
37 | {"boolean", "TYPE", "FALSE"}, | |
38 | {"boolean", "TYPE", "DONTCARE"}, | |
39 | {"boolean", "TYPE", "TRUE"}, | |
40 | {"class", "TYPE", "STAFF"}, | |
41 | {"class", "TYPE", "1990"}, | |
42 | {"class", "TYPE", "1991"}, | |
43 | {"class", "TYPE", "1992"}, | |
44 | {"class", "TYPE", "1993"}, | |
45 | {"class", "TYPE", "FACULTY"}, | |
46 | {"class", "TYPE", "G"}, | |
47 | {"class", "TYPE", "GUEST"}, | |
48 | {"class", "TYPE", "TEST"}, | |
49 | {"class", "TYPE", "SYSTEM"}, | |
50 | {"filesys", "TYPE", "ERR"}, | |
51 | {"filesys", "TYPE", "FSGROUP"}, | |
52 | {"filesys", "TYPE", "NFS"}, | |
53 | {"filesys", "TYPE", "RVD"}, | |
54 | {"filesys", "TYPE", "AFS"}, | |
55 | {"fs_access_AFS", "TYPE", "w"}, | |
56 | {"fs_access_AFS", "TYPE", "n"}, | |
57 | {"fs_access_NFS", "TYPE", "r"}, | |
58 | {"fs_access_NFS", "TYPE", "n"}, | |
59 | {"fs_access_NFS", "TYPE", "w"}, | |
60 | {"fs_access_RVD", "TYPE", "r"}, | |
61 | {"fs_access_RVD", "TYPE", "x"}, | |
62 | {"gaus", "TYPE", "LIST"}, | |
63 | {"gaus", "TYPE", "USER"}, | |
64 | {"gaus", "TYPE", "RLIST"}, | |
65 | {"gaus", "TYPE", "RUSER"}, | |
66 | {"lockertype", "TYPE", "COURSE"}, | |
67 | {"lockertype", "TYPE", "HOMEDIR"}, | |
68 | {"lockertype", "TYPE", "OTHER"}, | |
69 | {"lockertype", "TYPE", "PROJECT"}, | |
70 | {"lockertype", "TYPE", "SYSTEM"}, | |
71 | {"mac_type", "TYPE", "MAC"}, | |
72 | {"mac_type", "TYPE", "NEXT"}, | |
73 | {"mac_type", "TYPE", "PMAX"}, | |
74 | {"mac_type", "TYPE", "RT"}, | |
75 | {"mac_type", "TYPE", "VAX"}, | |
76 | {"member", "TYPE", "KERBEROS"}, | |
77 | {"member", "TYPE", "LIST"}, | |
78 | {"member", "TYPE", "STRING"}, | |
79 | {"member", "TYPE", "USER"}, | |
80 | {"pobox", "TYPE", "SMTP"}, | |
81 | {"pobox", "TYPE", "NONE"}, | |
82 | {"pobox", "TYPE", "POP"}, | |
83 | {"quota_type", "TYPE", "USER"}, | |
84 | {"quota_type", "TYPE", "GROUP"}, | |
85 | {"quota_type", "TYPE", "ANY"}, | |
86 | {"rmember", "TYPE", "LIST"}, | |
87 | {"rmember", "TYPE", "STRING"}, | |
88 | {"rmember", "TYPE", "USER"}, | |
89 | {"rmember", "TYPE", "KERBEROS"}, | |
90 | {"rmember", "TYPE", "RLIST"}, | |
91 | {"rmember", "TYPE", "RSTRING"}, | |
92 | {"rmember", "TYPE", "RUSER"}, | |
93 | {"rmember", "TYPE", "RKERBEROS"}, | |
94 | {"service", "TYPE", "REPLICAT"}, | |
95 | {"service", "TYPE", "REPLICATED"}, | |
96 | {"service", "TYPE", "UNIQUE"}, | |
97 | {"slabel", "TYPE", "LPR"}, | |
98 | {"slabel", "TYPE", "KERBEROS"}, | |
99 | {"slabel", "TYPE", "USRLIB"}, | |
100 | {"slabel", "TYPE", "SYSLIB"}, | |
101 | {"slabel", "TYPE", "ZEPHYR"}, | |
102 | {"ANY", "TYPEDATA", "none"}, | |
103 | {"KERBEROS", "TYPEDATA", "string"}, | |
104 | {"GROUP", "TYPEDATA", "list"}, | |
105 | {"LIST", "TYPEDATA", "list"}, | |
106 | {"NONE", "TYPEDATA", "none"}, | |
107 | {"POP", "TYPEDATA", "machine"}, | |
108 | {"RLIST", "TYPEDATA", "list"}, | |
109 | {"RSTRING", "TYPEDATA", "string"}, | |
110 | {"RUSER", "TYPEDATA", "user"}, | |
111 | {"SMTP", "TYPEDATA", "string"}, | |
112 | {"STRING", "TYPEDATA", "string"}, | |
113 | {"USER", "TYPEDATA", "user"}, | |
114 | 0 }; | |
115 | ||
116 | ||
117 | int ingres_errno = 0; | |
118 | ||
119 | main(argc, argv) | |
120 | int argc; | |
121 | char **argv; | |
122 | { | |
21e8ec7e | 123 | EXEC SQL BEGIN DECLARE SECTION; |
bbc27b1e | 124 | char buffer[256]; |
21e8ec7e | 125 | char *db, *tbl, *value, *user, *query, *trans, *type; |
126 | int i, list; | |
bce54968 | 127 | char stmt_buf[256]; |
21e8ec7e | 128 | EXEC SQL END DECLARE SECTION; |
129 | ||
130 | if (argc == 2) | |
131 | db = argv[1]; | |
132 | else | |
133 | db = "sms"; | |
134 | #ifsql INGRES | |
bce54968 | 135 | EXEC SQL CONNECT :db; |
21e8ec7e | 136 | #endsql |
137 | #ifsql INFORMIX | |
138 | EXEC SQL DATABASE db; | |
139 | #endsql | |
140 | EXEC SQL WHENEVER SQLERROR CALL ingerr; | |
141 | ||
142 | strcpy(buffer, "root"); | |
143 | user = buffer; | |
144 | while (buffer[0]) { | |
145 | for (i = 0; tbl = tables[i]; i++) { | |
146 | #ifsql INGRES | |
bce54968 | 147 | sprintf(stmt_buf,"GRANT ALL PRIVILEGES ON TABLE %s TO %s",tbl,user); |
148 | EXEC SQL EXECUTE IMMEDIATE :stmt_buf; | |
21e8ec7e | 149 | #endsql |
150 | if (ingres_errno) { | |
151 | printf("Unable to give %s permission to access table %s\n", | |
152 | user, tbl); | |
153 | exit(1); | |
154 | } | |
155 | } | |
156 | printf("Enter the name of another user to be given direct access to\n"); | |
157 | printf("the database, or [RETURN] if none: "); | |
158 | fflush(stdout); | |
159 | gets(user); | |
160 | } | |
161 | ||
162 | for (i = 0; tbl = tables[i]; i++) { | |
163 | EXEC SQL INSERT INTO tblstats | |
164 | (table_name, modtime, appends, updates, deletes) | |
529ecfa9 | 165 | VALUES (:tbl, 'now', 0, 0, 0); |
21e8ec7e | 166 | if (ingres_errno) { |
167 | printf("Unable to initialize tblstats for %s\n", tbl); | |
bbc27b1e | 168 | EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT); |
169 | printf("SQL error: %s\n",buffer); | |
21e8ec7e | 170 | exit(1); |
171 | } | |
172 | } | |
173 | ||
174 | for (i = 0; value = values[i]; i++) { | |
175 | EXEC SQL INSERT INTO numvalues (name, value) | |
176 | VALUES (:value, 1); | |
177 | if (ingres_errno) { | |
178 | printf("Unable to install initial value of %s\n", value); | |
bce54968 | 179 | EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT); |
180 | printf("SQL error: %s\n",buffer); | |
21e8ec7e | 181 | exit(1); |
182 | } | |
183 | } | |
184 | ||
185 | printf("What is the starting UID to assign: "); | |
186 | fflush(stdout); | |
187 | gets(buffer); | |
188 | i = atoi(buffer); | |
189 | EXEC SQL INSERT INTO numvalues (name, value) | |
529ecfa9 | 190 | VALUES ('uid', :i); |
21e8ec7e | 191 | if (ingres_errno) { |
192 | printf("Unable to install value for uid\n"); | |
bce54968 | 193 | EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT); |
194 | printf("SQL error: %s\n",buffer); | |
21e8ec7e | 195 | exit(1); |
196 | } | |
197 | ||
198 | printf("What is the starting GID to assign: "); | |
199 | fflush(stdout); | |
200 | gets(buffer); | |
201 | i = atoi(buffer); | |
202 | EXEC SQL INSERT INTO numvalues (name, value) | |
529ecfa9 | 203 | VALUES ('gid', :i); |
21e8ec7e | 204 | if (ingres_errno) { |
205 | printf("Unable to install value for gid\n"); | |
bce54968 | 206 | EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT); |
207 | printf("SQL error: %s\n",buffer); | |
21e8ec7e | 208 | exit(1); |
209 | } | |
210 | ||
211 | printf("What is the default NFS quota to assign: "); | |
212 | fflush(stdout); | |
213 | gets(buffer); | |
214 | i = atoi(buffer); | |
215 | EXEC SQL INSERT INTO numvalues (name, value) | |
529ecfa9 | 216 | VALUES ('def_quota', :i); |
21e8ec7e | 217 | if (ingres_errno) { |
218 | printf("Unable to install value for def_quota\n"); | |
bce54968 | 219 | EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT); |
220 | printf("SQL error: %s\n",buffer); | |
21e8ec7e | 221 | exit(1); |
222 | } | |
223 | ||
224 | /* place holder records */ | |
225 | EXEC SQL INSERT INTO users (login, potype, users_id) | |
529ecfa9 | 226 | VALUES ('[nobody]', 'NONE', 0); |
21e8ec7e | 227 | if (ingres_errno) { |
228 | printf("Unable to install 0 user\n"); | |
bce54968 | 229 | EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT); |
230 | printf("SQL error: %s\n",buffer); | |
21e8ec7e | 231 | exit(1); |
232 | } | |
233 | EXEC SQL INSERT INTO machine (name, type) | |
529ecfa9 | 234 | VALUES ('[NONE]', 'NONE'); |
21e8ec7e | 235 | if (ingres_errno) { |
236 | printf("Unable to install 0 machine\n"); | |
bce54968 | 237 | EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT); |
238 | printf("SQL error: %s\n",buffer); | |
21e8ec7e | 239 | exit(1); |
240 | } | |
241 | EXEC SQL INSERT INTO cluster (name) | |
529ecfa9 | 242 | VALUES ('[unassigned]'); |
21e8ec7e | 243 | if (ingres_errno) { |
244 | printf("Unable to install 0 cluster\n"); | |
bce54968 | 245 | EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT); |
246 | printf("SQL error: %s\n",buffer); | |
21e8ec7e | 247 | exit(1); |
248 | } | |
249 | EXEC SQL INSERT INTO list (name, acl_type) | |
529ecfa9 | 250 | VALUES ('[none]', 'NONE'); |
21e8ec7e | 251 | if (ingres_errno) { |
252 | printf("Unable to install 0 list\n"); | |
bce54968 | 253 | EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT); |
254 | printf("SQL error: %s\n",buffer); | |
21e8ec7e | 255 | exit(1); |
256 | } | |
257 | EXEC SQL INSERT INTO filesys (label, type) | |
529ecfa9 | 258 | VALUES ('[none]', 'NONE'); |
21e8ec7e | 259 | if (ingres_errno) { |
260 | printf("Unable to install 0 filesys\n"); | |
bce54968 | 261 | EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT); |
262 | printf("SQL error: %s\n",buffer); | |
21e8ec7e | 263 | exit(1); |
264 | } | |
265 | EXEC SQL INSERT INTO nfsphys (device) | |
529ecfa9 | 266 | VALUES ('/dev/null'); |
21e8ec7e | 267 | if (ingres_errno) { |
268 | printf("Unable to install 0 nfsphys\n"); | |
bce54968 | 269 | EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT); |
270 | printf("SQL error: %s\n",buffer); | |
21e8ec7e | 271 | exit(1); |
272 | } | |
273 | ||
274 | /* magic for ALL_USERS */ | |
275 | EXEC SQL INSERT INTO users (login, users_id, potype) | |
529ecfa9 | 276 | VALUES ('default', 1, 'NONE'); |
21e8ec7e | 277 | if (ingres_errno) { |
278 | printf("Unable to install default user\n"); | |
bce54968 | 279 | EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT); |
280 | printf("SQL error: %s\n",buffer); | |
21e8ec7e | 281 | exit(1); |
282 | } | |
283 | EXEC SQL INSERT INTO list (name, list_id, acl_type) | |
529ecfa9 | 284 | VALUES ('default', 1, 'NONE'); |
21e8ec7e | 285 | if (ingres_errno) { |
286 | printf("Unable to install default list\n"); | |
bce54968 | 287 | EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT); |
288 | printf("SQL error: %s\n",buffer); | |
21e8ec7e | 289 | exit(1); |
290 | } | |
291 | EXEC SQL INSERT INTO imembers | |
292 | (list_id, member_type, member_id, ref_count, direct) | |
529ecfa9 | 293 | VALUES (1, 'USER', 1, 1, 1); |
21e8ec7e | 294 | if (ingres_errno) { |
295 | printf("Unable to install default user on default list\n"); | |
bce54968 | 296 | EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT); |
297 | printf("SQL error: %s\n",buffer); | |
21e8ec7e | 298 | exit(1); |
299 | } | |
300 | ||
301 | /* Privileged users */ | |
302 | EXEC SQL INSERT INTO users (login, users_id, potype) | |
529ecfa9 | 303 | VALUES ('root', 2, 'NONE'); |
21e8ec7e | 304 | if (ingres_errno) { |
305 | printf("Unable to install root user\n"); | |
bce54968 | 306 | EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT); |
307 | printf("SQL error: %s\n",buffer); | |
21e8ec7e | 308 | exit(1); |
309 | } | |
310 | EXEC SQL INSERT INTO list (name, list_id, acl_type, acl_id) | |
529ecfa9 | 311 | VALUES ('dbadmin', 2, 'LIST', 2); |
21e8ec7e | 312 | if (ingres_errno) { |
313 | printf("Unable to install default dbadmin list\n"); | |
bce54968 | 314 | EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT); |
315 | printf("SQL error: %s\n",buffer); | |
21e8ec7e | 316 | exit(1); |
317 | } | |
318 | ||
319 | printf("What is the name of a privileged user: "); | |
320 | fflush(stdout); | |
321 | gets(buffer); | |
322 | user = buffer; | |
323 | EXEC SQL INSERT INTO users (login, users_id, potype) | |
529ecfa9 | 324 | VALUES (:user, 3, 'NONE'); |
21e8ec7e | 325 | if (ingres_errno) { |
326 | printf("Unable to install user %s\n", buffer); | |
bce54968 | 327 | EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT); |
328 | printf("SQL error: %s\n",buffer); | |
21e8ec7e | 329 | exit(1); |
330 | } | |
331 | EXEC SQL INSERT INTO imembers | |
332 | (list_id, member_type, member_id, ref_count, direct) | |
529ecfa9 | 333 | VALUES (2, 'USER', 2, 1, 1); |
21e8ec7e | 334 | if (ingres_errno) { |
335 | printf("Unable to put user root on list dbadmin\n"); | |
bce54968 | 336 | EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT); |
337 | printf("SQL error: %s\n",buffer); | |
21e8ec7e | 338 | exit(1); |
339 | } | |
340 | EXEC SQL INSERT INTO imembers | |
341 | (list_id, member_type, member_id, ref_count, direct) | |
529ecfa9 | 342 | VALUES (2, 'USER', 3, 1, 1); |
21e8ec7e | 343 | if (ingres_errno) { |
344 | printf("Unable to put user %s on list dbadmin\n", buffer); | |
bce54968 | 345 | EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT); |
346 | printf("SQL error: %s\n",buffer); | |
21e8ec7e | 347 | exit(1); |
348 | } | |
349 | ||
350 | /* And the capacls */ | |
351 | for (i = 0; i < QueryCount2; i++) { | |
352 | query = Queries2[i].name; | |
353 | value = Queries2[i].shortname; | |
354 | list = 2; | |
355 | if (!strcmp(value, "gali") || !strcmp(value, "glig") || | |
356 | !strcmp(value, "glim") || !strcmp(value, "gval")) | |
357 | list = 1; | |
358 | EXEC SQL INSERT INTO capacls (capability, tag, list_id) | |
359 | VALUES (:query, :value, :list); | |
360 | if (ingres_errno) { | |
361 | printf("Unable to install query ACL for %s (%s)\n", query, value); | |
bce54968 | 362 | EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT); |
363 | printf("SQL error: %s\n",buffer); | |
21e8ec7e | 364 | exit(1); |
365 | } | |
366 | } | |
367 | EXEC SQL INSERT INTO capacls (capability, tag, list_id) | |
529ecfa9 | 368 | VALUES ('trigger_dcm', 'tdcm', 2); |
21e8ec7e | 369 | |
370 | /* and the aliases */ | |
371 | for (i = 0; aliases[i].name ; i++) { | |
372 | value = aliases[i].name; | |
373 | type = aliases[i].type; | |
374 | trans = aliases[i].trans; | |
375 | EXEC SQL INSERT INTO alias (name, type, trans) | |
376 | VALUES (:value, :type, :trans); | |
377 | } | |
378 | ||
bce54968 | 379 | printf("\nNow committing work... "); |
380 | #ifsql INGRES | |
381 | EXEC SQL COMMIT WORK; | |
382 | #endsql | |
383 | ||
21e8ec7e | 384 | printf("done.\n"); |
385 | exit(0); | |
386 | } | |
387 | ||
388 | ||
389 | /* | |
390 | * ingerr: (supposedly) called when Ingres indicates an error. | |
391 | * I have not yet been able to get this to work to intercept a | |
392 | * database open error. | |
393 | */ | |
394 | ||
529ecfa9 | 395 | int ingerr() |
21e8ec7e | 396 | { |
529ecfa9 | 397 | ingres_errno = -sqlca.sqlcode; |
398 | return ingres_errno; | |
21e8ec7e | 399 | } |
400 | ||
401 | ||
402 | /* dummy routines */ | |
403 | int access_user() {} | |
404 | int access_login() {} | |
405 | int access_list() {} | |
406 | int access_visible_list() {} | |
407 | int access_vis_list_by_name() {} | |
408 | int access_member() {} | |
409 | int access_qgli() {} | |
410 | int access_service() {} | |
411 | int access_filesys() {} | |
412 | int setup_ausr() {} | |
413 | int setup_dusr() {} | |
414 | int setup_spop() {} | |
415 | int setup_dpob() {} | |
416 | int setup_dmac() {} | |
417 | int setup_dclu() {} | |
418 | int setup_alis() {} | |
419 | int setup_dlis() {} | |
420 | int setup_dsin() {} | |
421 | int setup_dshi() {} | |
422 | int setup_afil() {} | |
423 | int setup_ufil() {} | |
424 | int setup_dfil() {} | |
425 | int setup_dnfp() {} | |
426 | int setup_dqot() {} | |
427 | int setup_sshi() {} | |
428 | int setup_akum() {} | |
429 | int followup_fix_modby() {} | |
430 | int followup_ausr() {} | |
431 | int followup_gpob() {} | |
432 | int followup_glin() {} | |
433 | int followup_aqot() {} | |
434 | int followup_gzcl() {} | |
435 | int followup_gsha() {} | |
436 | int followup_gqot() {} | |
437 | int set_modtime() {} | |
438 | int set_modtime_by_id() {} | |
439 | int set_finger_modtime() {} | |
440 | int set_pobox_modtime() {} | |
441 | int set_uppercase_modtime() {} | |
442 | int set_mach_modtime_by_id() {} | |
443 | int set_cluster_modtime_by_id() {} | |
444 | int set_serverhost_modtime() {} | |
445 | int set_nfsphys_modtime() {} | |
446 | int set_filesys_modtime() {} | |
447 | int set_zephyr_modtime() {} | |
448 | int set_pobox() {} | |
449 | int get_list_info() {} | |
450 | int add_member_to_list() {} | |
451 | int delete_member_from_list() {} | |
452 | int get_ace_use() {} | |
453 | int qualified_get_lists() {} | |
454 | int get_members_of_list() {} | |
455 | int qualified_get_server() {} | |
456 | int qualified_get_serverhost() {} | |
457 | int trigger_dcm() {} | |
458 | int count_members_of_list() {} | |
459 | int get_lists_of_member() {} | |
460 | int register_user() {} | |
461 | int followup_gpce() {} | |
bce54968 | 462 | int prefetch_value() {} |
463 | int prefetch_filesys() {} | |
464 | int followup_dqot() {} | |
465 | int followup_guax() {} | |
466 | int followup_uuac() {} | |
467 | int get_end_members_of_list() {} | |
6f4a799e | 468 | int _sdl_followup() {} |