]> andersk Git - moira.git/blobdiff - dbck/phase2.pc
Command line printer manipulation client, and build goo.
[moira.git] / dbck / phase2.pc
index 6132007830254e91950850a849f9f42db90f75a9..de786a3d8da76da680b54f3e9843b3c1c7edca34 100644 (file)
@@ -34,6 +34,7 @@ int show_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);
+void clear_user_sponsor(struct user *u);
 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,
@@ -455,6 +456,36 @@ void user_check(int id, void *user, void *hint)
   u->sigwho = maybe_fixup_unref_string(u->sigwho, id, u->login, "users",
                                       "sigwho", "users_id");
 
+  switch (u->sponsor_type)
+    {
+    case 'U':
+      if (!hash_lookup(users, u->sponsor_id))
+       {
+         printf("User %s has non-existant USER sponsor %d\n",
+                u->login, u->sponsor_id);
+         if (single_fix("Set to no sponsor", 1))
+           clear_user_sponsor(u);
+       }
+      break;
+    case 'L':
+      if (!hash_lookup(lists, u->sponsor_id))
+       {
+         printf("User %s has non-existant LIST sponsor %d\n",
+                u->login, u->sponsor_id);
+         if (single_fix("Set to no sponsor", 1))
+           clear_user_sponsor(u);
+       }
+      break;
+    case 'S':
+    case 'K':
+      if (u->sponsor_id)
+       u->sponsor_id = maybe_fixup_unref_string(u->sponsor_id, id, u->login,
+                                              "users", "sponsor_id",
+                                              "users_id");
+      if (u->sponsor_id == 0)
+       clear_user_sponsor(u);
+    }
+
   pobox_check(id, u);
 }
 
@@ -636,6 +667,19 @@ void pobox_check(int id, struct user *u)
        }
       break;
 
+    case 'E':
+      if (!hash_lookup(machines, u->pobox_id))
+       {
+         printf("User %s(%s) has P.O.Box on non-existant machine %d\n",
+                u->login, u->fullname, u->pobox_id);
+         if (single_fix("Delete", 0))
+           {
+             remove_pobox(u->users_id);
+             u->potype = 'N';
+           }
+       }
+      break;
+
     case 'S':
       if (hash_lookup(string_dups, u->pobox_id))
        {
@@ -828,6 +872,22 @@ void subnet_check(int id, void *subnet, void *hint)
                               "modby", "snet_id");
 }
 
+void clear_user_sponsor(struct user *u)
+{
+  EXEC SQL BEGIN DECLARE SECTION;
+  int rowcount, id = u->users_id;
+  EXEC SQL END DECLARE SECTION;
+
+  EXEC SQL UPDATE users SET sponsor_type = 'NONE', sponsor_id = 0
+    WHERE users_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("users");
+}
+
 void clear_subnet_owner(struct subnet *s)
 {
   EXEC SQL BEGIN DECLARE SECTION;
This page took 0.039692 seconds and 4 git commands to generate.