X-Git-Url: http://andersk.mit.edu/gitweb/moira.git/blobdiff_plain/208a4f4a61a6dc37a4b912feb6a13ecf155f21c7..refs/heads/LOCKING:/dbck/phase1.dc diff --git a/dbck/phase1.dc b/dbck/phase1.dc index d2474ad6..a937cebe 100644 --- a/dbck/phase1.dc +++ b/dbck/phase1.dc @@ -49,8 +49,6 @@ struct save_queue *sq; int id = uu->users_id, rowcount; EXEC SQL END DECLARE SECTION; -/* replace users (login = "#"+text(users.uid), status = 0) - * where users.users_id = id */ EXEC SQL UPDATE users SET login = '#'+CHAR(users.uid), status=0 WHERE users_id = :id; EXEC SQL INQUIRE_SQL(:rowcount = rowcount); @@ -201,15 +199,17 @@ phase1() dprintf("Loading strings...\n"); sq = sq_create(); strings = create_hash(5000); -/* range of s is strings - * retrieve (id = s.string_id, buf = s.string) { - */ + EXEC SQL DECLARE csr101 CURSOR FOR - SELECT string_id, string FROM strings; + SELECT string_id, string FROM strings ORDER BY string_id; + if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode); EXEC SQL OPEN csr101; while(1) { EXEC SQL FETCH csr101 INTO :id, :buf; - if(sqlca.sqlcode != 0) break; + if (sqlca.sqlcode != 0) { + ingerr(&sqlca.sqlcode); + break; + } s = (struct string *) malloc(sizeof(struct string)); if (s == NULL) @@ -229,20 +229,19 @@ phase1() dprintf("Loading users...\n"); sq = sq_create(); users = create_hash(10000); -/* range of u is users - * retrieve (id = u.users_id, name = u.login, last = u.#last, - * first = u.#first, status = u.#status, buf = u.potype, - * id2 = u.pop_id, id3 = u.box_id, sid = u.modby, sid2 = u.fmodby, - * sid3 = u.pmodby, sid4 = u.comment, sid5 = u.sigwho) { - */ + EXEC SQL DECLARE csr102 CURSOR FOR SELECT users_id, login, last, first, status, potype, pop_id, box_id, - modby, fmodby, pmodby, comment, sigwho FROM users; + modby, fmodby, pmodby, comment, sigwho FROM users ORDER BY users_id; + if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode); EXEC SQL OPEN csr102; while(1) { EXEC SQL FETCH csr102 INTO :id, :name, :last, :first, :status, :buf, :id2, :id3, :sid, :sid2, :sid3, :sid4, :sid5; - if(sqlca.sqlcode != 0) break; + if (sqlca.sqlcode != 0) { + ingerr(&sqlca.sqlcode); + break; + } u = (struct user *) malloc(sizeof(struct user)); if (u == NULL) @@ -284,15 +283,18 @@ phase1() if (!fast) { sq = sq_create(); -/* retrieve (id = u.users_id) - * where u.login = users.login and u.tid != users.tid { - */ + EXEC SQL DECLARE csr103 CURSOR FOR - SELECT users_id FROM users; + SELECT u1.users_id FROM users u1, users u2 + WHERE u1.login = u2.login and u1.tid != u2.tid; + if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode); EXEC SQL OPEN csr103; while(1) { EXEC SQL FETCH csr103 INTO :id; - if(sqlca.sqlcode != 0) break; + if (sqlca.sqlcode != 0) { + ingerr(&sqlca.sqlcode); + break; + } sq_save_data(sq, hash_lookup(users, id)); } EXEC SQL CLOSE csr103; @@ -302,44 +304,56 @@ phase1() dprintf("Loading machines...\n"); machines = create_hash(1000); sq = sq_create(); -/* range of m is machine - * retrieve (id = m.mach_id, name = m.#name, sid = m.modby) { - */ + EXEC SQL DECLARE csr104 CURSOR FOR - SELECT mach_id, name, modby FROM machine; + SELECT mach_id, name, snet_id, owner_type, owner_id, + acomment, ocomment, creator, modby + FROM machine ORDER BY mach_id; + if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode); EXEC SQL OPEN csr104; while(1) { - EXEC SQL FETCH csr104 INTO :id, :name, :sid; - if(sqlca.sqlcode != 0) break; + EXEC SQL FETCH csr104 INTO :id, :name, :id2, :buf, :id3, :sid2, + :sid3, :sid4, :sid; + if (sqlca.sqlcode != 0) { + ingerr(&sqlca.sqlcode); + break; + } m = (struct machine *) malloc(sizeof(struct machine)); if (m == NULL) out_of_mem("storing machines"); strcpy(m->name, strtrim(name)); + m->owner_type = buf[0]; + m->owner_id = id3; + m->snet_id = id2; m->mach_id = id; m->clucount = 0; if (hash_store(machines, id, m)) { sq_save_data(sq, hash_lookup(machines, id)); sq_save_data(sq, m); } - if (sid < 0) - string_check(-sid); + if (sid2) string_check(sid2); + if (sid3) string_check(sid3); + if (sid4 < 0) string_check(-sid4); + if (sid < 0) string_check(-sid); } EXEC SQL CLOSE csr104; generic_fix(sq, show_mach_id, "Change ID", fix_mach_id, 0); if (!fast) { sq = sq_create(); -/* retrieve (id = m.mach_id) - * where m.#name = machine.#name and m.tid != machine.tid { - */ + EXEC SQL DECLARE csr105 CURSOR FOR SELECT m1.mach_id FROM machine m1, machine m2 WHERE m1.name = m2.name AND m1.tid != m2.tid; + if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode); EXEC SQL OPEN csr105; while(1) { EXEC SQL FETCH csr105 INTO :id; - if(sqlca.sqlcode != 0) break; + if (sqlca.sqlcode != 0) { + ingerr(&sqlca.sqlcode); + break; + } sq_save_data(sq, hash_lookup(machines, id)); } @@ -347,18 +361,39 @@ phase1() generic_fix(sq, show_mach_name, "Change name", cant_fix, 0); } + dprintf("Loading subnets...\n"); + subnets = create_hash(254); + + EXEC SQL DECLARE csr115 CURSOR FOR + SELECT snet_id, name from subnet; + if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode); + EXEC SQL OPEN csr115; + while(1) { + EXEC SQL FETCH csr115 INTO :id, :name; + if (sqlca.sqlcode != 0) { + ingerr(&sqlca.sqlcode); + break; + } + if (hash_store(subnets, id, name)) { + printf("Duplicate subnet ID: %d (%s)\n", id, name); + } + } + EXEC SQL CLOSE csr115; + dprintf("Loading clusters...\n"); sq = sq_create(); clusters = create_hash(100); -/* range of c is cluster - * retrieve (id = c.clu_id, name = c.#name, sid = c.modby) { - */ + EXEC SQL DECLARE csr106 CURSOR FOR SELECT clu_id, name, modby FROM cluster; + if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode); EXEC SQL OPEN csr106; while(1) { EXEC SQL FETCH csr106 INTO :id, :name, :sid; - if(sqlca.sqlcode != 0) break; + if (sqlca.sqlcode != 0) { + ingerr(&sqlca.sqlcode); + break; + } c = (struct cluster *) malloc(sizeof(struct cluster)); if (c == NULL) @@ -377,16 +412,18 @@ phase1() if (!fast) { sq = sq_create(); -/* retrieve (id = c.clu_id) - * where c.#name = cluster.#name and c.tid != cluster.tid { - */ + EXEC SQL DECLARE csr107 CURSOR FOR - SELECT clu_id FROM cluster c1, cluster c2 + SELECT c1.clu_id FROM cluster c1, cluster c2 WHERE c1.name=c2.name AND c1.tid != c2.tid; + if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode); EXEC SQL OPEN csr107; while(1) { EXEC SQL FETCH csr107 INTO :id; - if(sqlca.sqlcode != 0) break; + if (sqlca.sqlcode != 0) { + ingerr(&sqlca.sqlcode); + break; + } sq_save_data(sq, hash_lookup(clusters, id)); } @@ -397,16 +434,18 @@ phase1() dprintf("Loading lists...\n"); sq = sq_create(); lists = create_hash(10000); -/* range of l is list - * retrieve (id = l.list_id, name = l.#name, - * aid = l.acl_id, buf = l.acl_type, sid = l.modby) { - */ + EXEC SQL DECLARE csr108 CURSOR FOR - SELECT list_id, name, acl_id, acl_type, modby FROM list; + SELECT list_id, name, acl_id, acl_type, modby FROM list + ORDER BY list_id; + if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode); EXEC SQL OPEN csr108; while(1) { EXEC SQL FETCH csr108 INTO :id, :name, :aid, :buf, :sid; - if(sqlca.sqlcode != 0) break; + if (sqlca.sqlcode != 0) { + ingerr(&sqlca.sqlcode); + break; + } l = (struct list *) malloc(sizeof(struct list)); if (l == NULL) out_of_mem("storing lists"); @@ -427,16 +466,18 @@ phase1() if (!fast) { sq = sq_create(); -/* retrieve (id = l.list_id) - * where l.#name = list.#name and l.tid != list.tid { - */ + EXEC SQL DECLARE csr109 CURSOR FOR - SELECT list_id FROM list l1, list l2 + SELECT l1.list_id FROM list l1, list l2 WHERE l1.name=l2.name AND l1.tid != l2.tid; + if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode); EXEC SQL OPEN csr109; while(1) { EXEC SQL FETCH csr109 INTO :id; - if(sqlca.sqlcode != 0) break; + if (sqlca.sqlcode != 0) { + ingerr(&sqlca.sqlcode); + break; + } sq_save_data(sq, hash_lookup(lists, id)); } @@ -447,19 +488,19 @@ phase1() dprintf("Loading filesys...\n"); sq = sq_create(); filesys = create_hash(10000); -/* retrieve (id = filesys.filsys_id, name = filesys.label, aid = filesys.owner, - * aid2 = filesys.owners, id2 = filesys.phys_id, - * id3 = filesys.mach_id, buf = filesys.type, - * name1 = filesys.#name, sid = filesys.modby) { - */ + EXEC SQL DECLARE csr110 CURSOR FOR SELECT filsys_id, label, owner, owners, phys_id, mach_id, - type, name, modby FROM filesys; + type, name, modby FROM filesys ORDER BY filsys_id; + if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode); EXEC SQL OPEN csr110; while(1) { EXEC SQL FETCH csr110 INTO :id, :name, :aid, :aid2, :id2, :id3, :buf, :name1, :sid; - if(sqlca.sqlcode != 0) break; + if (sqlca.sqlcode != 0) { + ingerr(&sqlca.sqlcode); + break; + } f = (struct filesys *) malloc(sizeof(struct filesys)); if (f == NULL) @@ -486,16 +527,17 @@ phase1() dprintf("Loading nfsphys...\n"); sq = sq_create(); nfsphys = create_hash(500); -/* retrieve (id = nfsphys.nfsphys_id, name = nfsphys.dir, - * id2 = nfsphys.mach_id, id3 = nfsphys.allocated, - * sid = nfsphys.modby) { - */ + EXEC SQL DECLARE csr111 CURSOR FOR SELECT nfsphys_id, dir, mach_id, allocated, modby FROM nfsphys; + if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode); EXEC SQL OPEN csr111; while(1) { EXEC SQL FETCH csr111 INTO :id, :name, :id2, :id3, :sid; - if(sqlca.sqlcode != 0) break; + if (sqlca.sqlcode != 0) { + ingerr(&sqlca.sqlcode); + break; + } n = (struct nfsphys *) malloc(sizeof(struct nfsphys)); if (n == NULL) @@ -517,17 +559,19 @@ phase1() generic_fix(sq, show_np_id, "Change ID", fix_np_id, 0); if (!fast) { -/* range of s is strings - * retrieve (id = s.string_id, buf = s.string) - * where s.string = strings.string and s.tid != strings.tid { - */ + + dprintf("Checking for duplicate strings...\n"); EXEC SQL DECLARE csr112 CURSOR FOR SELECT s1.string_id, s1.string FROM strings s1, strings s2 WHERE s1.string=s2.string AND s1.tid != s2.tid; + if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode); EXEC SQL OPEN csr112; while(1) { EXEC SQL FETCH csr112 INTO :id, :buf; - if(sqlca.sqlcode != 0) break; + if (sqlca.sqlcode != 0) { + ingerr(&sqlca.sqlcode); + break; + } printf("String %s(%d) is a duplicate!\n", strtrim(buf), id); printf("Not fixing this error\n"); @@ -537,33 +581,35 @@ phase1() if (!fast) { dprintf("Scanning krbmap...\n"); -/* range of k is krbmap - * retrieve (id = k.users_id) - * where k.users_id = krbmap.users_id and k.tid != krbmap.tid { - */ + EXEC SQL DECLARE csr113 CURSOR FOR SELECT k1.users_id FROM krbmap k1, krbmap k2 WHERE k1.users_id = k2.users_id AND k1.tid != k2.tid; + if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode); EXEC SQL OPEN csr113; while(1) { EXEC SQL FETCH csr113 INTO :id; - if(sqlca.sqlcode != 0) break; + if (sqlca.sqlcode != 0) { + ingerr(&sqlca.sqlcode); + break; + } printf("User %d is in the krbmap more than once!\n", id); printf("Not fixing this error\n"); } EXEC SQL CLOSE csr113; -/* retrieve (id = k.string_id) - * where k.string_id = krbmap.string_id and k.tid != krbmap.tid { - */ EXEC SQL DECLARE csr114 CURSOR FOR SELECT k1.string_id FROM krbmap k1, krbmap k2 WHERE k1.string_id = k2.string_id AND k1.tid != k2.tid; + if (sqlca.sqlcode != 0) ingerr(&sqlca.sqlcode); EXEC SQL OPEN csr114; while(1) { EXEC SQL FETCH csr114 INTO :id; - if(sqlca.sqlcode != 0) break; + if (sqlca.sqlcode != 0) { + ingerr(&sqlca.sqlcode); + break; + } printf("Principal %d is in the krbmap more than once!\n", id); printf("Not fixing this error\n");