3 * Creates a new sms database
5 * Copyright 1988 by the Massachusetts Institute of Technology.
6 * For copying and distribution information, please see the file
10 #include <mit-copyright.h>
12 #include "../server/query.h"
13 EXEC SQL INCLUDE sqlca;
15 extern char *tables[];
16 extern struct query Queries2[];
17 extern int QueryCount2;
19 char *values[] = { "users_id", "mach_id", "clu_id", "list_id",
20 "nfsphys_id", "filsys_id", "strings_id", "dcm_enable",
23 struct alias { char *name;
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"},
117 int ingres_errno = 0;
123 EXEC SQL BEGIN DECLARE SECTION;
125 char *db, *tbl, *value, *user, *query, *trans, *type;
128 EXEC SQL END DECLARE SECTION;
135 EXEC SQL CONNECT :db;
138 EXEC SQL DATABASE db;
140 EXEC SQL WHENEVER SQLERROR CALL ingerr;
142 strcpy(buffer, "root");
145 for (i = 0; tbl = tables[i]; i++) {
147 sprintf(stmt_buf,"GRANT ALL PRIVILEGES ON TABLE %s TO %s",tbl,user);
148 EXEC SQL EXECUTE IMMEDIATE :stmt_buf;
151 printf("Unable to give %s permission to access table %s\n",
156 printf("Enter the name of another user to be given direct access to\n");
157 printf("the database, or [RETURN] if none: ");
162 for (i = 0; tbl = tables[i]; i++) {
163 EXEC SQL INSERT INTO tblstats
164 (table_name, modtime, appends, updates, deletes)
165 VALUES (:tbl, 'now', 0, 0, 0);
167 printf("Unable to initialize tblstats for %s\n", tbl);
168 EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT);
169 printf("SQL error: %s\n",buffer);
174 for (i = 0; value = values[i]; i++) {
175 EXEC SQL INSERT INTO numvalues (name, value)
178 printf("Unable to install initial value of %s\n", value);
179 EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT);
180 printf("SQL error: %s\n",buffer);
185 printf("What is the starting UID to assign: ");
189 EXEC SQL INSERT INTO numvalues (name, value)
192 printf("Unable to install value for uid\n");
193 EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT);
194 printf("SQL error: %s\n",buffer);
198 printf("What is the starting GID to assign: ");
202 EXEC SQL INSERT INTO numvalues (name, value)
205 printf("Unable to install value for gid\n");
206 EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT);
207 printf("SQL error: %s\n",buffer);
211 printf("What is the default NFS quota to assign: ");
215 EXEC SQL INSERT INTO numvalues (name, value)
216 VALUES ('def_quota', :i);
218 printf("Unable to install value for def_quota\n");
219 EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT);
220 printf("SQL error: %s\n",buffer);
224 /* place holder records */
225 EXEC SQL INSERT INTO users (login, potype, users_id)
226 VALUES ('[nobody]', 'NONE', 0);
228 printf("Unable to install 0 user\n");
229 EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT);
230 printf("SQL error: %s\n",buffer);
233 EXEC SQL INSERT INTO machine (name, type)
234 VALUES ('[NONE]', 'NONE');
236 printf("Unable to install 0 machine\n");
237 EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT);
238 printf("SQL error: %s\n",buffer);
241 EXEC SQL INSERT INTO cluster (name)
242 VALUES ('[unassigned]');
244 printf("Unable to install 0 cluster\n");
245 EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT);
246 printf("SQL error: %s\n",buffer);
249 EXEC SQL INSERT INTO list (name, acl_type)
250 VALUES ('[none]', 'NONE');
252 printf("Unable to install 0 list\n");
253 EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT);
254 printf("SQL error: %s\n",buffer);
257 EXEC SQL INSERT INTO filesys (label, type)
258 VALUES ('[none]', 'NONE');
260 printf("Unable to install 0 filesys\n");
261 EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT);
262 printf("SQL error: %s\n",buffer);
265 EXEC SQL INSERT INTO nfsphys (device)
266 VALUES ('/dev/null');
268 printf("Unable to install 0 nfsphys\n");
269 EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT);
270 printf("SQL error: %s\n",buffer);
274 /* magic for ALL_USERS */
275 EXEC SQL INSERT INTO users (login, users_id, potype)
276 VALUES ('default', 1, 'NONE');
278 printf("Unable to install default user\n");
279 EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT);
280 printf("SQL error: %s\n",buffer);
283 EXEC SQL INSERT INTO list (name, list_id, acl_type)
284 VALUES ('default', 1, 'NONE');
286 printf("Unable to install default list\n");
287 EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT);
288 printf("SQL error: %s\n",buffer);
291 EXEC SQL INSERT INTO imembers
292 (list_id, member_type, member_id, ref_count, direct)
293 VALUES (1, 'USER', 1, 1, 1);
295 printf("Unable to install default user on default list\n");
296 EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT);
297 printf("SQL error: %s\n",buffer);
301 /* Privileged users */
302 EXEC SQL INSERT INTO users (login, users_id, potype)
303 VALUES ('root', 2, 'NONE');
305 printf("Unable to install root user\n");
306 EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT);
307 printf("SQL error: %s\n",buffer);
310 EXEC SQL INSERT INTO list (name, list_id, acl_type, acl_id)
311 VALUES ('dbadmin', 2, 'LIST', 2);
313 printf("Unable to install default dbadmin list\n");
314 EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT);
315 printf("SQL error: %s\n",buffer);
319 printf("What is the name of a privileged user: ");
323 EXEC SQL INSERT INTO users (login, users_id, potype)
324 VALUES (:user, 3, 'NONE');
326 printf("Unable to install user %s\n", buffer);
327 EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT);
328 printf("SQL error: %s\n",buffer);
331 EXEC SQL INSERT INTO imembers
332 (list_id, member_type, member_id, ref_count, direct)
333 VALUES (2, 'USER', 2, 1, 1);
335 printf("Unable to put user root on list dbadmin\n");
336 EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT);
337 printf("SQL error: %s\n",buffer);
340 EXEC SQL INSERT INTO imembers
341 (list_id, member_type, member_id, ref_count, direct)
342 VALUES (2, 'USER', 3, 1, 1);
344 printf("Unable to put user %s on list dbadmin\n", buffer);
345 EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT);
346 printf("SQL error: %s\n",buffer);
350 /* And the capacls */
351 for (i = 0; i < QueryCount2; i++) {
352 query = Queries2[i].name;
353 value = Queries2[i].shortname;
355 if (!strcmp(value, "gali") || !strcmp(value, "glig") ||
356 !strcmp(value, "glim") || !strcmp(value, "gval"))
358 EXEC SQL INSERT INTO capacls (capability, tag, list_id)
359 VALUES (:query, :value, :list);
361 printf("Unable to install query ACL for %s (%s)\n", query, value);
362 EXEC SQL INQUIRE_SQL (:buffer = ERRORTEXT);
363 printf("SQL error: %s\n",buffer);
367 EXEC SQL INSERT INTO capacls (capability, tag, list_id)
368 VALUES ('trigger_dcm', 'tdcm', 2);
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);
379 printf("\nNow committing work... ");
381 EXEC SQL COMMIT WORK;
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.
397 ingres_errno = -sqlca.sqlcode;
404 int access_login() {}
406 int access_visible_list() {}
407 int access_vis_list_by_name() {}
408 int access_member() {}
410 int access_service() {}
411 int access_filesys() {}
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() {}
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() {}
449 int get_list_info() {}
450 int add_member_to_list() {}
451 int delete_member_from_list() {}
453 int qualified_get_lists() {}
454 int get_members_of_list() {}
455 int qualified_get_server() {}
456 int qualified_get_serverhost() {}
458 int count_members_of_list() {}
459 int get_lists_of_member() {}
460 int register_user() {}
461 int followup_gpce() {}
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() {}
468 int _sdl_followup() {}