From 5cbbe2d2b70342b7a9a79ef265aa0d0c8fe19eed Mon Sep 17 00:00:00 2001 From: zacheiss Date: Fri, 19 Jun 2009 02:18:47 +0000 Subject: [PATCH] Call update_user_status moira query to change status to 1, rather than doing it via SQL, so we trigger an incremental. --- reg_svr/reg_svr.pc | 47 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/reg_svr/reg_svr.pc b/reg_svr/reg_svr.pc index 7bdb6971..947a4297 100644 --- a/reg_svr/reg_svr.pc +++ b/reg_svr/reg_svr.pc @@ -47,6 +47,7 @@ char *find_usernames(char *first, char *middle, char *last); 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); @@ -776,10 +777,16 @@ void PSWD(reg_client *rc, int argc, char **argv) } 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")) @@ -792,6 +799,40 @@ void QUIT(reg_client *rc, int argc, char **argv) { } +/* 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) { -- 2.45.1