3 * This generates the msql database for the network tables.
5 * (c) Copyright 1988, 1990 by the Massachusetts Institute of Technology.
6 * For copying and distribution information, please see the file
10 #include <mit-copyright.h>
13 #include <sys/types.h>
16 EXEC SQL INCLUDE sqlca;
19 char *whoami = "ndb.gen";
20 char *db = "moira/moira";
22 void users(FILE *out);
23 void hosts(FILE *out);
25 int main(int argc, char **argv)
28 char *outf = NULL, outft[64];
37 sprintf(outft, "%s~", outf);
38 if (!(out = fopen(outft, "w")))
40 fprintf(stderr, "unable to open %s for output\n", outf);
46 fprintf(stderr, "usage: %s [outfile]\n", argv[0]);
54 fprintf(stderr, "users...\n");
56 fprintf(stderr, "hosts...\n");
61 perror("close failed");
73 EXEC SQL BEGIN DECLARE SECTION;
74 char login[9], id[17];
75 EXEC SQL END DECLARE SECTION;
77 EXEC SQL WHENEVER SQLERROR GOTO sqlerr;
79 EXEC SQL DECLARE users1 CURSOR FOR SELECT login, clearid
80 FROM users WHERE clearid != '0' AND clearid != '999999999'
81 AND login NOT LIKE '#%';
85 EXEC SQL FETCH users1 INTO :login, id;
97 fprintf(out, "user,%s,%s\n", id, login);
100 EXEC SQL CLOSE users1;
107 db_error(sqlca.sqlcode);
111 void hosts(FILE *out)
116 EXEC SQL BEGIN DECLARE SECTION;
117 char name[128], mitid[17], owner_type[9], addr[17], inuse[64];
118 int id, use, status, owner;
119 EXEC SQL END DECLARE SECTION;
121 EXEC SQL WHENEVER SQLERROR GOTO sqlerr;
123 fprintf(stderr, "aliases...\n");
125 EXEC SQL DECLARE hosts1 CURSOR FOR SELECT
126 mach_id, name FROM hostalias;
127 EXEC SQL OPEN hosts1;
131 EXEC SQL FETCH hosts1 INTO :id, :name;
138 if ((i = strlen(name)) < 9 || strcmp(&name[i-8], ".MIT.EDU"))
140 fprintf(stderr, "Name %s not in MIT domain\n", name);
143 fprintf(out, "host_alias,%d,%s\n", id, name);
146 EXEC SQL CLOSE hosts1;
150 fprintf(stderr, "users (again)...\n");
152 EXEC SQL DECLARE hosts2 CURSOR FOR SELECT
153 users_id, clearid FROM users
154 WHERE clearid != '0' and clearid !='999999999';
155 EXEC SQL OPEN hosts2;
156 users = create_hash(20001);
160 EXEC SQL FETCH hosts2 INTO :id, :mitid;
165 if (!*strtrim(mitid))
168 hash_store(users, id, strsave(mitid));
171 EXEC SQL CLOSE hosts2;
175 fprintf(stderr, "hosts (for real)...\n");
177 EXEC SQL DECLARE hosts3 CURSOR FOR SELECT
178 name, mach_id, address, use, inuse, status, owner_type, owner_id
180 EXEC SQL OPEN hosts3;
183 EXEC SQL FETCH hosts3 INTO :name, :id, :addr, :use, :inuse, :status,
191 if ((i = strlen(name)) < 9 || strcmp(&name[i-8], ".MIT.EDU"))
196 fprintf(out, "host,%d,%s,%s,%d,0,%d", id,name,addr,use,status);
197 if (!strcmp(owner_type, "USER"))
199 if (p = hash_lookup(users, owner))
200 fprintf(out, ",USER,%s\n", p);
203 fprintf(out, ",NONE,0\n");
206 EXEC SQL CLOSE hosts3;
212 db_error(sqlca.sqlcode);