X-Git-Url: http://andersk.mit.edu/gitweb/moira.git/blobdiff_plain/dabf20aac401b927dde6dda6b0ae8de3ded8ebe4..fe0a844a056f5f9d887251364966d6a4dee16800:/dbck/phase2.pc?ds=sidebyside diff --git a/dbck/phase2.pc b/dbck/phase2.pc index af248b9f..9bc0d6c3 100644 --- a/dbck/phase2.pc +++ b/dbck/phase2.pc @@ -23,20 +23,21 @@ int show_mcm_mach(void *id); int show_mcm_clu(void *id); int show_hostalias(void *id); int show_printer_mach(void *id); +int show_printer_server(void *id); int show_printer_loghost(void *id); int show_printer_spool(void *id); int show_printer_quota(void *id); int show_printer_ac(void *id); int show_printer_lpc_acl(void *id); -int fix_printer_ac(void *id); -int fix_printer_lpc_acl(void *id); +void fix_printer_ac(void *id); +void fix_printer_lpc_acl(void *id); void user_check(int id, void *user, void *hint); int maybe_fixup_unref_string(int sid, int oid, char *oname, char *table, char *field, char *idfield); int maybe_fixup_modby(int sid, int oid, char *oname, char *table, char *field, char *idfield); -int maybe_fixup_unref_string2(char *table, char *field, char *cursor, int sid); -int maybe_fixup_modby2(char *table, char *field, char *cursor, int id); +int maybe_fixup_unref_string2(char *table, char *field, char *rowid, int sid); +int maybe_fixup_modby2(char *table, char *field, char *rowid, int id); void pobox_check(int id, struct user *u); void remove_pobox(int id); void fix_smtp_pobox(int id, int sid); @@ -62,6 +63,7 @@ void del_sh_mach(void *id); void fsmatch(int id, void *nfsphys, void *filesys); void check_fs(int id, void *filesys, void *hint); void check_nfsphys(int id, void *nfsphys, void *hint); +void check_ps(int id, void *printserver, void *hint); int show_fsg_missing(void *id); int show_fsg_type(void *filesys); void fix_fsg_type(void *filesys); @@ -187,6 +189,32 @@ int show_printer_mach(void *id) return found; } +int show_printer_server(void *id) +{ + EXEC SQL BEGIN DECLARE SECTION; + int iid = (int)id, found = 1; + char name[PRINTERS_NAME_SIZE]; + EXEC SQL END DECLARE SECTION; + + EXEC SQL DECLARE csr_sps CURSOR FOR + SELECT name FROM printers WHERE mach_id = :iid; + EXEC SQL OPEN csr_sps; + while (1) + { + EXEC SQL FETCH csr_sps INTO :name; + if (sqlca.sqlcode) + break; + + strtrim(name); + + found = 0; + printf("Printer %s, non-existant printserver %d in printers table\n", + name, iid); + } + EXEC SQL CLOSE csr_sps; + return found; +} + int show_printer_loghost(void *id) { EXEC SQL BEGIN DECLARE SECTION; @@ -194,12 +222,12 @@ int show_printer_loghost(void *id) char name[PRINTERS_NAME_SIZE]; EXEC SQL END DECLARE SECTION; - EXEC SQL DECLARE csr235 CURSOR FOR + EXEC SQL DECLARE csr236 CURSOR FOR SELECT name FROM printers WHERE loghost = :iid; - EXEC SQL OPEN csr235; + EXEC SQL OPEN csr236; while (1) { - EXEC SQL FETCH csr235 INTO :name; + EXEC SQL FETCH csr236 INTO :name; if (sqlca.sqlcode) break; @@ -209,7 +237,7 @@ int show_printer_loghost(void *id) printf("Printer %s, non-existant spool machine %d in printers table\n", name, iid); } - EXEC SQL CLOSE csr235; + EXEC SQL CLOSE csr236; return found; } @@ -220,12 +248,12 @@ int show_printer_spool(void *id) char name[PRINTERS_NAME_SIZE]; EXEC SQL END DECLARE SECTION; - EXEC SQL DECLARE csr235 CURSOR FOR + EXEC SQL DECLARE csr237 CURSOR FOR SELECT name FROM printers WHERE rm = :iid; - EXEC SQL OPEN csr235; + EXEC SQL OPEN csr237; while (1) { - EXEC SQL FETCH csr235 INTO :name; + EXEC SQL FETCH csr237 INTO :name; if (sqlca.sqlcode) break; @@ -235,7 +263,7 @@ int show_printer_spool(void *id) printf("Printer %s, non-existant spool machine %d in printers table\n", name, iid); } - EXEC SQL CLOSE csr235; + EXEC SQL CLOSE csr237; return found; } @@ -246,12 +274,12 @@ int show_printer_quota(void *id) char name[PRINTERS_NAME_SIZE]; EXEC SQL END DECLARE SECTION; - EXEC SQL DECLARE csr236 CURSOR FOR + EXEC SQL DECLARE csr238 CURSOR FOR SELECT name FROM printers WHERE rq = :iid; - EXEC SQL OPEN csr236; + EXEC SQL OPEN csr238; while (1) { - EXEC SQL FETCH csr236 INTO :name; + EXEC SQL FETCH csr238 INTO :name; if (sqlca.sqlcode) break; @@ -261,7 +289,7 @@ int show_printer_quota(void *id) printf("Printer %s, non-existant quota server %d in printers table\n", name, iid); } - EXEC SQL CLOSE csr236; + EXEC SQL CLOSE csr238; return found; } @@ -272,12 +300,12 @@ int show_printer_ac(void *id) char name[PRINTERS_NAME_SIZE]; EXEC SQL END DECLARE SECTION; - EXEC SQL DECLARE csr236 CURSOR FOR + EXEC SQL DECLARE csr239 CURSOR FOR SELECT name FROM printers WHERE ac = :iid; - EXEC SQL OPEN csr236; + EXEC SQL OPEN csr239; while (1) { - EXEC SQL FETCH csr236 INTO :name; + EXEC SQL FETCH csr239 INTO :name; if (sqlca.sqlcode) break; @@ -287,7 +315,7 @@ int show_printer_ac(void *id) printf("Printer %s, non-existant restrict list %d in printers table\n", name, iid); } - EXEC SQL CLOSE csr236; + EXEC SQL CLOSE csr239; return found; } @@ -298,12 +326,12 @@ int show_printer_lpc_acl(void *id) char name[PRINTERS_NAME_SIZE]; EXEC SQL END DECLARE SECTION; - EXEC SQL DECLARE csr236 CURSOR FOR + EXEC SQL DECLARE csr240 CURSOR FOR SELECT name FROM printers WHERE lpc_acl = :iid; - EXEC SQL OPEN csr236; + EXEC SQL OPEN csr240; while (1) { - EXEC SQL FETCH csr236 INTO :name; + EXEC SQL FETCH csr240 INTO :name; if (sqlca.sqlcode) break; @@ -313,11 +341,11 @@ int show_printer_lpc_acl(void *id) printf("Printer %s, non-existant lpc ACL %d in printers table\n", name, iid); } - EXEC SQL CLOSE csr236; + EXEC SQL CLOSE csr240; return found; } -void fix_printer_ac(int id) +void fix_printer_ac(void *id) { EXEC SQL BEGIN DECLARE SECTION; int rowcount, iid = (int)id; @@ -332,7 +360,7 @@ void fix_printer_ac(int id) modified("printers"); } -void fix_printer_lpc_acl(int id) +void fix_printer_lpc_acl(void *id) { EXEC SQL BEGIN DECLARE SECTION; int rowcount, iid = (int)id; @@ -385,9 +413,9 @@ int maybe_fixup_unref_string(int sid, int oid, char *oname, char *table, if (single_fix("Replace duplicate", 0)) { ret = newid; - string_check(newid); doit = 1; } + string_check(ret); } else if (!string_check(ret)) { @@ -450,7 +478,7 @@ int maybe_fixup_modby(int sid, int oid, char *oname, char *table, return sid; } -int maybe_fixup_unref_string2(char *table, char *field, char *cursor, int sid) +int maybe_fixup_unref_string2(char *table, char *field, char *rowid, int sid) { int ret = (sid < 0) ? -sid : sid, doit = 0, newid; EXEC SQL BEGIN DECLARE SECTION; @@ -465,15 +493,15 @@ int maybe_fixup_unref_string2(char *table, char *field, char *cursor, int sid) if (single_fix("Replace duplicate", 0)) { ret = newid; - string_check(newid); doit = 1; } + string_check(ret); } else if (!string_check(ret)) { printf("%s entry has a %s with non-existant string %d\n", table, field, ret); - if (single_fix("Delete", 1)) + if (single_fix("Clear", 1)) { ret = 0; doit = 1; @@ -482,8 +510,8 @@ int maybe_fixup_unref_string2(char *table, char *field, char *cursor, int sid) if (doit) { - sprintf(stmt_buf, "UPDATE %s SET %s = %d WHERE CURRENT OF %s", - table, field, (sid < 0) ? -ret : ret, cursor); + sprintf(stmt_buf, "UPDATE %s SET %s = %d WHERE rowid = '%s'", + table, field, (sid < 0) ? -ret : ret, rowid); EXEC SQL EXECUTE IMMEDIATE :stmt_buf; rowcount = sqlca.sqlerrd[2]; if (rowcount == 1) @@ -495,7 +523,7 @@ int maybe_fixup_unref_string2(char *table, char *field, char *cursor, int sid) return (sid < 0) ? -ret : ret; } -int maybe_fixup_modby2(char *table, char *field, char *cursor, int id) +int maybe_fixup_modby2(char *table, char *field, char *rowid, int id) { EXEC SQL BEGIN DECLARE SECTION; char stmt_buf[500]; @@ -503,17 +531,17 @@ int maybe_fixup_modby2(char *table, char *field, char *cursor, int id) EXEC SQL END DECLARE SECTION; if (id < 0) - return maybe_fixup_unref_string2(table, field, cursor, id); + return maybe_fixup_unref_string2(table, field, rowid, id); else { if (!hash_lookup(users, id)) { printf("%s entry has a %s with non-existant user %d\n", table, field, id); - if (single_fix("Delete", 1)) + if (single_fix("Clear", 1)) { - sprintf(stmt_buf, "UPDATE %s SET %s = 0 WHERE CURRENT OF %s", - table, field, cursor); + sprintf(stmt_buf, "UPDATE %s SET %s = 0 WHERE rowid = '%s'", + table, field, rowid); EXEC SQL EXECUTE IMMEDIATE :stmt_buf; rowcount = sqlca.sqlerrd[2]; if (rowcount == 1) @@ -530,6 +558,8 @@ int maybe_fixup_modby2(char *table, char *field, char *cursor, int id) void pobox_check(int id, struct user *u) { + struct filesys *fs; + switch (u->potype) { case 'P': @@ -544,6 +574,7 @@ void pobox_check(int id, struct user *u) } } break; + case 'S': if (hash_lookup(string_dups, u->pobox_id)) { @@ -570,6 +601,31 @@ void pobox_check(int id, struct user *u) } } break; + + case 'I': + fs = hash_lookup(filesys, u->pobox_id); + if (!fs) + { + printf("User %s(%s) has P.O.Box on non-existant filesystem %d\n", + u->login, u->fullname, u->pobox_id); + if (single_fix("Delete", 0)) + { + remove_pobox(u->users_id); + u->potype = 'N'; + } + } + else if (fs->type != 'I') + { + printf("User %s(%s) has IMAP P.O.Box on non-IMAP filesystem %s\n", + u->login, u->fullname, fs->name); + if (single_fix("Delete", 0)) + { + remove_pobox(u->users_id); + u->potype = 'N'; + } + } + break; + default: ; } @@ -1162,7 +1218,7 @@ void check_fs(int id, void *filesys, void *hint) } } - if (f->type == 'N') + if (f->type == 'N' || f->type == 'I') { if (!hash_lookup(nfsphys, f->phys_id)) { @@ -1267,6 +1323,103 @@ void check_nfsphys(int id, void *nfsphys, void *hint) } } +static void clear_ps_owner(struct printserver *ps) +{ + EXEC SQL BEGIN DECLARE SECTION; + int rowcount, id = ps->mach_id; + EXEC SQL END DECLARE SECTION; + + EXEC SQL UPDATE printserver SET owner_type = 'NONE', owner_id = 0 + WHERE mach_id = :id; + rowcount = sqlca.sqlerrd[2]; + if (rowcount > 0) + printf("%d entr%s fixed\n", rowcount, rowcount == 1 ? "y" : "ies"); + else + printf("Not fixed\n"); + modified("printservers"); +} + +static void clear_ps_lpc(struct printserver *ps) +{ + EXEC SQL BEGIN DECLARE SECTION; + int rowcount, id = ps->mach_id; + EXEC SQL END DECLARE SECTION; + + EXEC SQL UPDATE printserver SET lpc_acl = 0 + WHERE mach_id = :id; + rowcount = sqlca.sqlerrd[2]; + if (rowcount > 0) + printf("%d entr%s fixed\n", rowcount, rowcount == 1 ? "y" : "ies"); + else + printf("Not fixed\n"); + modified("printservers"); +} + +void check_ps(int id, void *printserver, void *hint) +{ + struct printserver *ps = printserver; + struct machine *m; + char *name; + + m = hash_lookup(machines, id); + if (!m) + { + printf("Printserver on non-existant machine %d\n", id); + if (single_fix("Delete", 0)) + { + single_delete("printserver", "mach_id", id); + return; + } + else + name = "[UNKNOWN]"; + } + else + name = m->name; + + ps->modby = maybe_fixup_modby(ps->modby, id, name, "printserver", + "modby", "mach_id"); + ps->printer_types = maybe_fixup_unref_string(ps->printer_types, id, name, + "printservers", "printer_types", + "mach_id"); + + switch (ps->owner_type) + { + case 'U': + if (!hash_lookup(users, ps->owner_id)) + { + printf("Printserver %s has non-existant USER owner %d\n", + name, ps->owner_id); + if (single_fix("Set to no owner", 1)) + clear_ps_owner(ps); + } + break; + case 'L': + if (!hash_lookup(lists, ps->owner_id)) + { + printf("Printserver %s has non-existant LIST owner %d\n", + name, ps->owner_id); + if (single_fix("Set to no owner", 1)) + clear_ps_owner(ps); + } + break; + case 'K': + if (ps->owner_id) + ps->owner_id = maybe_fixup_unref_string(ps->owner_id, id, name, + "printserver", "owner_id", + "mach_id"); + if (ps->owner_id == 0) + clear_ps_owner(ps); + } + + if (!hash_lookup(lists, ps->lpc_acl)) + { + printf("Printserver %s has non-existent lpc_acl %d\n", + name, ps->lpc_acl); + if (single_fix("Set to no lpc_acl", 1)) + clear_ps_lpc(ps); + } +} + int show_fsg_missing(void *id) { EXEC SQL BEGIN DECLARE SECTION; @@ -1418,10 +1571,9 @@ int show_quota_nolist(void *id) void fix_quota_nouser(void *id) { EXEC SQL BEGIN DECLARE SECTION; - int iid = (int)id, rowcount, id1; + int iid = (int)id, rowcount; EXEC SQL END DECLARE SECTION; - id1 = ((struct filesys *)hash_lookup(filesys, iid))->phys_id; EXEC SQL DELETE FROM quota WHERE entity_id = :iid AND type = 'USER'; rowcount = sqlca.sqlerrd[2]; @@ -1435,10 +1587,9 @@ void fix_quota_nouser(void *id) void fix_quota_nolist(void *id) { EXEC SQL BEGIN DECLARE SECTION; - int iid = (int)id, rowcount, id1; + int iid = (int)id, rowcount; EXEC SQL END DECLARE SECTION; - id1 = ((struct filesys *)hash_lookup(filesys, iid))->phys_id; EXEC SQL DELETE FROM quota WHERE entity_id = :iid AND type = 'GROUP'; rowcount = sqlca.sqlerrd[2]; if (rowcount > 0) @@ -1665,41 +1816,14 @@ int show_krb_str(void *id) return found; } -int show_pdm_mach(void *id) -{ - EXEC SQL BEGIN DECLARE SECTION; - char name[PALLADIUM_NAME_SIZE]; - int iid = (int)id; - EXEC SQL END DECLARE SECTION; - int found = 1; - - EXEC SQL DECLARE csr220 CURSOR FOR - SELECT name FROM palladium - WHERE mach_id = :iid; - EXEC SQL OPEN csr220; - while (1) - { - EXEC SQL FETCH csr220 INTO :name; - if (sqlca.sqlcode) - break; - - strtrim(name); - printf("Palladium server/supervisor %s is on non-existant machine %d\n", - name, iid); - found = 0; - } - EXEC SQL CLOSE csr220; - return found; -} - - void phase2(void) { - struct save_queue *sq, *sq1, *sq2, *sq3, *sq4, *sq5; + struct save_queue *sq, *sq1, *sq2, *sq3, *sq4, *sq5, *sq6; struct filesys *f; struct list *l; struct nfsphys *n; struct machine *m; + char rowid[32]; printf("Phase 2 - Checking references\n"); @@ -1774,7 +1898,7 @@ void phase2(void) sq5 = sq_create(); EXEC SQL DECLARE csr223 CURSOR FOR - SELECT list_id, member_type, member_id, ref_count, direct + SELECT list_id, member_type, member_id, ref_count, direct, rowid FROM imembers FOR UPDATE OF member_id; EXEC SQL OPEN csr223; while (1) @@ -1785,7 +1909,7 @@ void phase2(void) EXEC SQL END DECLARE SECTION; EXEC SQL FETCH csr223 INTO :list_id, :type, :id, - :ref_count, :direct; + :ref_count, :direct, :rowid; if (sqlca.sqlcode) break; @@ -1795,9 +1919,9 @@ void phase2(void) sq_save_unique_data(sq2, (void *)id); else if (type[0] == 'L' && !hash_lookup(lists, id)) sq_save_unique_data(sq3, (void *)id); - else if (type[0] == 'S' && !maybe_fixup_unref_string2("imembers", "member_id", "csr223", id)) + else if (type[0] == 'S' && !maybe_fixup_unref_string2("imembers", "member_id", strtrim(rowid), id)) sq_save_unique_data(sq4, (void *)id); - else if (type[0] == 'K' && !maybe_fixup_unref_string2("imembers", "member_id", "csr223", id)) + else if (type[0] == 'K' && !maybe_fixup_unref_string2("imembers", "member_id", strtrim(rowid), id)) sq_save_unique_data(sq5, (void *)id); else l->members++; @@ -1813,7 +1937,7 @@ void phase2(void) sq1 = sq_create(); sq2 = sq_create(); EXEC SQL DECLARE csr224 CURSOR FOR - SELECT name, acl_type, acl_id, modby FROM servers + SELECT name, acl_type, acl_id, modby, rowid FROM servers FOR UPDATE of modby; EXEC SQL OPEN csr224; while (1) @@ -1823,11 +1947,11 @@ void phase2(void) char name[SERVERS_NAME_SIZE], acl_type[SERVERS_ACL_TYPE_SIZE]; EXEC SQL END DECLARE SECTION; - EXEC SQL FETCH csr224 INTO :name, :acl_type, :acl_id, :modby; + EXEC SQL FETCH csr224 INTO :name, :acl_type, :acl_id, :modby, :rowid; if (sqlca.sqlcode) break; - maybe_fixup_modby2("servers", "modby", "csr224", modby); + maybe_fixup_modby2("servers", "modby", strtrim(rowid), modby); strtrim(acl_type); if (!strcmp(acl_type, "USER") && !hash_lookup(users, acl_id)) sq_save_data(sq1, (void *)acl_id); @@ -1841,7 +1965,7 @@ void phase2(void) dprintf("Checking serverhosts...\n"); sq = sq_create(); EXEC SQL DECLARE csr225 CURSOR FOR - SELECT mach_id, modby FROM serverhosts + SELECT mach_id, modby, rowid FROM serverhosts FOR UPDATE OF modby; EXEC SQL OPEN csr225; while (1) @@ -1850,11 +1974,11 @@ void phase2(void) int mach_id, modby; EXEC SQL END DECLARE SECTION; - EXEC SQL FETCH csr225 INTO :mach_id, :modby; + EXEC SQL FETCH csr225 INTO :mach_id, :modby, :rowid; if (sqlca.sqlcode) break; - maybe_fixup_modby2("serverhosts", "modby", "csr225", modby); + maybe_fixup_modby2("serverhosts", "modby", strtrim(rowid), modby); if (!hash_lookup(machines, mach_id)) sq_save_data(sq, (void *)mach_id); } @@ -1899,7 +2023,7 @@ void phase2(void) sq3 = sq_create(); sq4 = sq_create(); EXEC SQL DECLARE csr227 CURSOR FOR - SELECT entity_id, type, filsys_id, phys_id, quota, modby + SELECT entity_id, type, filsys_id, phys_id, quota, modby, rowid FROM quota FOR UPDATE OF modby; EXEC SQL OPEN csr227; while (1) @@ -1910,11 +2034,11 @@ void phase2(void) EXEC SQL END DECLARE SECTION; EXEC SQL FETCH csr227 INTO :entity_id, :type, :filsys_id, - :phys_id, :quota, :modby; + :phys_id, :quota, :modby, :rowid; if (sqlca.sqlcode) break; - maybe_fixup_modby2("quota", "modby", "csr227", modby); + maybe_fixup_modby2("quota", "modby", strtrim(rowid), modby); if (type[0] == 'U' && entity_id != 0 && !hash_lookup(users, entity_id)) sq_save_data(sq1, (void *)entity_id); else if (type[0] == 'G' && !hash_lookup(lists, entity_id)) @@ -1936,7 +2060,7 @@ void phase2(void) dprintf("Checking hostaccess...\n"); EXEC SQL DECLARE csr228 CURSOR FOR - SELECT mach_id, acl_type, acl_id, modby FROM hostaccess + SELECT mach_id, acl_type, acl_id, modby, rowid FROM hostaccess FOR UPDATE OF modby; EXEC SQL OPEN csr228; while (1) @@ -1946,11 +2070,11 @@ void phase2(void) char acl_type[HOSTACCESS_ACL_TYPE_SIZE]; EXEC SQL END DECLARE SECTION; - EXEC SQL FETCH csr228 INTO :mach_id, :acl_type, :acl_id, :modby; + EXEC SQL FETCH csr228 INTO :mach_id, :acl_type, :acl_id, :modby, :rowid; if (sqlca.sqlcode) break; - maybe_fixup_modby2("hostaccess", "modby", "csr228", modby); + maybe_fixup_modby2("hostaccess", "modby", strtrim(rowid), modby); strtrim(acl_type); if (!hash_lookup(machines, mach_id)) { @@ -1974,7 +2098,7 @@ void phase2(void) sq1 = sq_create(); sq2 = sq_create(); EXEC SQL DECLARE csr230 CURSOR FOR - SELECT users_id, string_id FROM krbmap + SELECT users_id, string_id, rowid FROM krbmap FOR UPDATE OF string_id; EXEC SQL OPEN csr230; while (1) @@ -1983,13 +2107,13 @@ void phase2(void) int users_id, string_id; EXEC SQL END DECLARE SECTION; - EXEC SQL FETCH csr230 INTO :users_id, :string_id; + EXEC SQL FETCH csr230 INTO :users_id, :string_id, :rowid; if (sqlca.sqlcode) break; if (!hash_lookup(users, users_id)) sq_save_unique_data(sq1, (void *)users_id); - else if (!maybe_fixup_unref_string2("krbmap", "string_id", "csr230", string_id)) + else if (!maybe_fixup_unref_string2("krbmap", "string_id", strtrim(rowid), string_id)) sq_save_unique_data(sq2, (void *)string_id); } EXEC SQL CLOSE csr230; @@ -2046,25 +2170,28 @@ void phase2(void) sq3 = sq_create(); sq4 = sq_create(); sq5 = sq_create(); + sq6 = sq_create(); EXEC SQL DECLARE csr233 CURSOR FOR - SELECT mach_id, loghost, rm, rq, ac, lpc_acl, modby FROM printers; + SELECT mach_id, loghost, rm, rq, ac, lpc_acl, modby, rowid FROM printers; EXEC SQL OPEN csr233; while (1) { EXEC SQL BEGIN DECLARE SECTION; - int mach_id, loghost, rm, rq, ac, lpc_acl, modby + int mach_id, loghost, rm, rq, ac, lpc_acl, modby; EXEC SQL END DECLARE SECTION; - EXEC SQL FETCH csr233 INTO :mach_id, :loghost, :rm, :rq, - :lpc_acl, :modby; + EXEC SQL FETCH csr233 INTO :mach_id, :loghost, :rm, :rq, :ac, + :lpc_acl, :modby, :rowid; if (sqlca.sqlcode) break; - maybe_fixup_modby2("printers", "modby", "csr233", modby); + maybe_fixup_modby2("printers", "modby", strtrim(rowid), modby); if (!hash_lookup(machines, mach_id)) sq_save_unique_data(sq1, (void *)mach_id); else if (!hash_lookup(machines, rm)) sq_save_unique_data(sq2, (void *)rm); + else if (!hash_lookup(printservers, rm)) + sq_save_unique_data(sq6, (void *)mach_id); else if (!hash_lookup(machines, rq)) sq_save_unique_data(sq3, (void *)rq); else { @@ -2075,13 +2202,19 @@ void phase2(void) if (!hash_lookup(machines, loghost)) { show_printer_loghost((void *)loghost); - cantfix(); + cant_fix(); } + } } EXEC SQL CLOSE csr233; generic_delete(sq1, show_printer_mach, "printers", "mach_id", 1); + generic_delete(sq6, show_printer_server, "printers", "mach_id", 1); generic_delete(sq2, show_printer_spool, "printers", "rm", 1); generic_delete(sq3, show_printer_quota, "printers", "rq", 1); generic_fix(sq4, show_printer_ac, "Clear", fix_printer_ac, 1); generic_fix(sq5, show_printer_lpc_acl, "Clear", fix_printer_lpc_acl, 1); + + dprintf("Checking printservers\n"); + hash_step(printservers, check_ps, NULL); } +