]> andersk Git - moira.git/blobdiff - reg_svr/reg_svr.pc
Deal with containers, and use "NONE" instead of the empty string in some
[moira.git] / reg_svr / reg_svr.pc
index 0841bfbef23cfbebc2dcd7e96002d03a14cfbc86..6c6b8f3c709cf255a1ea3a9484ce4037f78c89a6 100644 (file)
@@ -160,12 +160,12 @@ int main(int argc, char **argv)
     {
       if (state == RS_RUNNING && stat(MOIRA_MOTD_FILE, &st) == 0)
        {
-         state == RS_SLEEPING;
+         state = RS_SLEEPING;
          com_err(whoami, 0, "found motd. reg_svr is sleeping");
        }
       else if (state == RS_SLEEPING && stat(MOIRA_MOTD_FILE, &st) == -1)
        {
-         state == RS_RUNNING;
+         state = RS_RUNNING;
          com_err(whoami, 0, "motd gone. reg_svr is running");
        }
 
@@ -407,10 +407,10 @@ void RIFO(reg_client *rc, int argc, char **argv)
   else
     {
       rc->suggestions = find_usernames(first, middle, last);
-      if (!rc->suggestions)
+      if (!rc->suggestions && errno)
        {
          com_err(whoami, errno, "in RIFO");
-         reply(rc, INTERNAL_ERROR, "INIT", "c", NULL, "Out of memory");
+         reply(rc, INTERNAL_ERROR, "INIT", "c", NULL, error_message(errno));
          return;
        }
     }
@@ -420,8 +420,7 @@ void RIFO(reg_client *rc, int argc, char **argv)
   else if (!rc->username)
     reply(rc, FOUND, "GETL", "c", rc->suggestions, fullname, class);
   else
-    reply(rc, FORCED_USERNAME, "GETP", "c", NULL, fullname, class,
-         rc->username);
+    reply(rc, FORCED_USERNAME, "GETP", "c", NULL, rc->username);
 }
 
 void SWRD(reg_client *rc, int argc, char **argv)
@@ -596,7 +595,12 @@ void PSWD(reg_client *rc, int argc, char **argv)
     }
 
   status = register_kerberos(rc->username, password);
-  if (status == MR_IN_USE)
+  if (status == MR_QUALITY)
+    {
+      reply(rc, PASSWORD_SIMPLE, "GETP", "c", NULL);
+      return;
+    }
+  else if (status == MR_IN_USE)
     {
       reply(rc, RESERVED_USERNAME_UNAVAILABLE, "INIT", "c", NULL,
            rc->username);
@@ -652,7 +656,7 @@ int register_user(int uid, char *username)
   sprintf(uidbuf, "%d", uid);
   qargv[0] = uidbuf;
   qargv[1] = username;
-  qargv[2] = "0";
+  qargv[2] = "IMAP";
   status = mr_query("register_user", 3, qargv, NULL, NULL);
   mr_disconnect();
   return status;
@@ -737,20 +741,29 @@ char *find_usernames(char *first, char *middle, char *last)
       EXEC SQL SELECT COUNT(login) INTO :count FROM users
        WHERE login = :username;
       if (sqlca.sqlcode)
-       return NULL;
+       {
+         errno = MR_DBMS_ERR;
+         return NULL;
+       }
       if (count == 0)
        {
          EXEC SQL SELECT COUNT(name) INTO :count FROM list
            WHERE name = :username;
          if (sqlca.sqlcode)
-           return NULL;
+           {
+             errno = MR_DBMS_ERR;
+             return NULL;
+           }
        }
       if (count == 0)
        {
          EXEC SQL SELECT COUNT(label) INTO :count FROM filesys
            WHERE label = :username;
          if (sqlca.sqlcode)
-           return NULL;
+           {
+             errno = MR_DBMS_ERR;
+             return NULL;
+           }
        }
 
       if (count == 0)
@@ -775,6 +788,9 @@ char *find_usernames(char *first, char *middle, char *last)
       ;
     }
 
+  /* unames will be NULL if we couldn't suggest a username. Clear
+     errno so the caller can distinguish this from an error case. */
+  errno = 0;
   return unames;
 }
 
This page took 0.553723 seconds and 4 git commands to generate.