3 * (c) Copyright 2007 by the Massachusetts Institute of Technology.
6 #include <mit-copyright.h>
8 #include <moira_site.h>
19 EXEC SQL INCLUDE sqlca;
21 char *whoami = "confluence.gen";
22 char *db = "moira/moira";
26 void output_list(int id, void *list, void *out);
28 int main(int argc, char **argv)
30 char filename[MAXPATHLEN], *targetfile, *l;
33 EXEC SQL BEGIN DECLARE SECTION;
35 char lname[LIST_NAME_SIZE];
36 EXEC SQL END DECLARE SECTION;
43 sprintf(filename, "%s~", targetfile);
44 if (!(out = fopen(filename, "w")))
46 fprintf(stderr, "unable to open %s for output\n", filename);
52 fprintf(stderr, "usage: %s [outfile]\n", argv[0]);
56 lists = create_hash(15000);
58 EXEC SQL DECLARE l_cursor CURSOR FOR
59 SELECT l.list_id, l.name FROM list l
60 WHERE l.active = 1 and l.grouplist = 1;
61 EXEC SQL OPEN l_cursor;
64 EXEC SQL FETCH l_cursor INTO :lid, :lname;
67 l = strdup(strtrim(lname));
68 if (hash_store(lists, lid, l) < 0)
70 fprintf(stderr, "Out of memory!\n");
75 EXEC SQL CLOSE l_cursor;
76 fprintf(stderr, "Loaded %d lists\n", cnt);
78 hash_step(lists, output_list, out);
82 perror("close failed");
91 void output_list(int id, void *list, void *out)
93 EXEC SQL BEGIN DECLARE SECTION;
97 char login[USERS_LOGIN_SIZE];
98 char stringmember[STRINGS_STRING_SIZE];
99 EXEC SQL END DECLARE SECTION;
100 char *maybecomma = "";
102 EXEC SQL SELECT gid INTO :lgid FROM list WHERE list_id = :lid;
104 fprintf(out, "%s:%d:", list, lgid);
106 EXEC SQL DECLARE u_cursor CURSOR FOR
107 SELECT UNIQUE u.login FROM users u, imembers i, list l
108 WHERE l.list_id = :lid AND l.list_id = i.list_id AND
109 i.member_type = 'USER' AND i.member_id = u.users_id;
110 EXEC SQL OPEN u_cursor;
113 EXEC SQL FETCH u_cursor INTO :login;
116 fprintf(out, "%s%s%s", maybecomma, strtrim(login), "@mit.edu");
119 EXEC SQL CLOSE u_cursor;
121 EXEC SQL DECLARE s_cursor CURSOR FOR
122 SELECT UNIQUE s.string FROM strings s, imembers i, list l
123 WHERE l.list_id = :lid AND l.list_id = i.list_id AND
124 i.member_type = 'STRING' AND i.member_id = s.string_id;
125 EXEC SQL OPEN s_cursor;
128 EXEC SQL FETCH s_cursor INTO :stringmember;
131 fprintf(out, "%s%s", maybecomma, strtrim(stringmember));
134 EXEC SQL CLOSE s_cursor;