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[MAXPATHLEN];
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[USERS_LOGIN_SIZE], id[USERS_CLEARID_SIZE];
80 char first[USERS_FIRST_SIZE], middle[USERS_MIDDLE_SIZE];
81 char last[USERS_LAST_SIZE], type[USERS_TYPE_SIZE];
83 EXEC SQL END DECLARE SECTION;
85 EXEC SQL WHENEVER SQLERROR GOTO sqlerr;
87 EXEC SQL DECLARE users1 CURSOR FOR
88 SELECT login, clearid, users_id, type, status, first, middle, last
89 FROM users WHERE clearid != '0'
90 AND login NOT LIKE '#%';
94 EXEC SQL FETCH users1 INTO :login, :id, :users_id, :type, :status,
95 :first, :middle, :last;
107 fprintf(out, "user,%d,%s,%s,%s,%d,%s,%s,%s\n", users_id, id, login,
108 type, status, first, middle, last);
111 EXEC SQL CLOSE users1;
118 db_error(sqlca.sqlcode);
122 void hosts(FILE *out)
127 EXEC SQL BEGIN DECLARE SECTION;
128 char name[MACHINE_NAME_SIZE], owner_type[MACHINE_OWNER_TYPE_SIZE];
129 char addr[MACHINE_ADDRESS_SIZE];
130 int id, use, status, owner;
131 EXEC SQL END DECLARE SECTION;
133 EXEC SQL WHENEVER SQLERROR GOTO sqlerr;
135 fprintf(stderr, "aliases...\n");
137 EXEC SQL DECLARE hosts1 CURSOR FOR SELECT
138 mach_id, name FROM hostalias;
139 EXEC SQL OPEN hosts1;
143 EXEC SQL FETCH hosts1 INTO :id, :name;
150 if ((i = strlen(name)) < 9 || strcmp(&name[i - 8], ".MIT.EDU"))
152 fprintf(stderr, "Name %s not in MIT domain\n", name);
155 fprintf(out, "host_alias,%d,%s\n", id, name);
158 EXEC SQL CLOSE hosts1;
162 fprintf(stderr, "hosts (for real)...\n");
164 EXEC SQL DECLARE hosts3 CURSOR FOR SELECT
165 name, mach_id, address, use, status, owner_type, owner_id
167 EXEC SQL OPEN hosts3;
170 EXEC SQL FETCH hosts3 INTO :name, :id, :addr, :use, :status,
178 if ((i = strlen(name)) < 9 || strcmp(&name[i - 8], ".MIT.EDU"))
182 fprintf(out, "host,%d,%s,%s,%d,0,%d", id, name, addr, use, status);
183 if (!strcmp(owner_type, "USER"))
184 fprintf(out, ",USER,%d\n", owner);
186 fprintf(out, ",NONE,0\n");
189 EXEC SQL CLOSE hosts3;
195 db_error(sqlca.sqlcode);