int check_username_available(char *username);
void fixname(char *name);
int register_user(int uid, char *username);
+int update_user_status(char *username, int account_status);
void mr_com_err(const char *whoami, long code, const char *fmt, va_list pvar);
void sigshut(int);
}
if (rc->user_status == US_NO_LOGIN_YET_KERBEROS_ONLY)
- EXEC SQL UPDATE users SET status = 9 WHERE login = :login;
+ status = update_user_status(rc->username, US_REGISTERED_KERBEROS_ONLY);
else
- EXEC SQL UPDATE users SET status = 1 WHERE login = :login;
- EXEC SQL COMMIT;
+ status = update_user_status(rc->username, US_REGISTERED);
+
+ if (status)
+ {
+ reply(rc, INTERNAL_ERROR, "INIT", "c", NULL,
+ error_message(status));
+ return;
+ }
EXEC SQL SELECT potype INTO :potype FROM users WHERE login = :login;
if (!strcmp(potype, "EXCHANGE"))
{
}
+/* Update a user's status in Moira */
+int update_user_status(char *username, int account_status)
+{
+ char statusbuf[2], *qargv[2], *motd = NULL;
+ long status;
+
+ status = mr_connect(hostname);
+ if (status)
+ return status;
+
+ status = mr_motd(&motd);
+ if (status || motd)
+ {
+ mr_disconnect();
+ return MR_DOWN;
+ }
+
+ status = mr_krb5_auth("reg_svr");
+ if (status)
+ {
+ com_err(whoami, status, "authenticating to moira");
+ mr_disconnect();
+ return MR_INTERNAL;
+ }
+
+ sprintf(statusbuf, "%d", account_status);
+ qargv[0] = username;
+ qargv[1] = statusbuf;
+
+ status = mr_query("update_user_status", 2, qargv, NULL, NULL);
+ mr_disconnect();
+ return status;
+}
+
/* Register a user in Moira */
int register_user(int uid, char *username)
{