3 * This generates the msql database for the network tables.
5 * Copyright 1998 by the Massachusetts Institute of Technology.
6 * For copying and distribution information, please see the file
10 #include <mit-copyright.h>
20 EXEC SQL INCLUDE sqlca;
24 char *whoami = "ndb.gen";
25 char *db = "moira/moira";
27 void users(FILE *out);
28 void hosts(FILE *out);
30 int main(int argc, char **argv)
33 char *outf = NULL, outft[64];
42 sprintf(outft, "%s~", outf);
43 if (!(out = fopen(outft, "w")))
45 fprintf(stderr, "unable to open %s for output\n", outf);
51 fprintf(stderr, "usage: %s [outfile]\n", argv[0]);
59 fprintf(stderr, "users...\n");
61 fprintf(stderr, "hosts...\n");
66 perror("close failed");
78 EXEC SQL BEGIN DECLARE SECTION;
79 char login[9], id[17];
80 EXEC SQL END DECLARE SECTION;
82 EXEC SQL WHENEVER SQLERROR GOTO sqlerr;
84 EXEC SQL DECLARE users1 CURSOR FOR SELECT login, clearid
85 FROM users WHERE clearid != '0' AND clearid != '999999999'
86 AND login NOT LIKE '#%';
90 EXEC SQL FETCH users1 INTO :login, id;
102 fprintf(out, "user,%s,%s\n", id, login);
105 EXEC SQL CLOSE users1;
112 db_error(sqlca.sqlcode);
116 void hosts(FILE *out)
121 EXEC SQL BEGIN DECLARE SECTION;
122 char name[128], mitid[17], owner_type[9], addr[17], inuse[64];
123 int id, use, status, owner;
124 EXEC SQL END DECLARE SECTION;
126 EXEC SQL WHENEVER SQLERROR GOTO sqlerr;
128 fprintf(stderr, "aliases...\n");
130 EXEC SQL DECLARE hosts1 CURSOR FOR SELECT
131 mach_id, name FROM hostalias;
132 EXEC SQL OPEN hosts1;
136 EXEC SQL FETCH hosts1 INTO :id, :name;
143 if ((i = strlen(name)) < 9 || strcmp(&name[i-8], ".MIT.EDU"))
145 fprintf(stderr, "Name %s not in MIT domain\n", name);
148 fprintf(out, "host_alias,%d,%s\n", id, name);
151 EXEC SQL CLOSE hosts1;
155 fprintf(stderr, "users (again)...\n");
157 EXEC SQL DECLARE hosts2 CURSOR FOR SELECT
158 users_id, clearid FROM users
159 WHERE clearid != '0' and clearid !='999999999';
160 EXEC SQL OPEN hosts2;
161 users = create_hash(20001);
165 EXEC SQL FETCH hosts2 INTO :id, :mitid;
170 if (!*strtrim(mitid))
173 hash_store(users, id, strsave(mitid));
176 EXEC SQL CLOSE hosts2;
180 fprintf(stderr, "hosts (for real)...\n");
182 EXEC SQL DECLARE hosts3 CURSOR FOR SELECT
183 name, mach_id, address, use, inuse, status, owner_type, owner_id
185 EXEC SQL OPEN hosts3;
188 EXEC SQL FETCH hosts3 INTO :name, :id, :addr, :use, :inuse, :status,
196 if ((i = strlen(name)) < 9 || strcmp(&name[i-8], ".MIT.EDU"))
201 fprintf(out, "host,%d,%s,%s,%d,0,%d", id,name,addr,use,status);
202 if (!strcmp(owner_type, "USER"))
204 if (p = hash_lookup(users, owner))
205 fprintf(out, ",USER,%s\n", p);
208 fprintf(out, ",NONE,0\n");
211 EXEC SQL CLOSE hosts3;
217 db_error(sqlca.sqlcode);