X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fuser_ops.c;h=7d4088c56fb20c023eeb724f2d8fd5fcfc8fbfee;hb=da1debddf5988512ac50ff0b62ac85c8f3b8d0f4;hp=d7f88ad4dc79e1fa94d39d00a69044925db64bd2;hpb=cdb76f6e9aafb137b3969f96ad1731e19e534fe0;p=citadel.git diff --git a/citadel/user_ops.c b/citadel/user_ops.c index d7f88ad4d..7d4088c56 100644 --- a/citadel/user_ops.c +++ b/citadel/user_ops.c @@ -712,40 +712,42 @@ void cmd_user(char *cmdbuf) */ void do_login(void) { - CC->logged_in = 1; - syslog(LOG_NOTICE, "<%s> logged in\n", CC->curr_user); + struct CitContext *CCC = CC; - CtdlGetUserLock(&CC->user, CC->curr_user); - ++(CC->user.timescalled); - CC->previous_login = CC->user.lastcall; - time(&CC->user.lastcall); + CCC->logged_in = 1; + syslog(LOG_NOTICE, "<%s> logged in\n", CCC->curr_user); + + CtdlGetUserLock(&CCC->user, CCC->curr_user); + ++(CCC->user.timescalled); + CCC->previous_login = CCC->user.lastcall; + time(&CCC->user.lastcall); /* If this user's name is the name of the system administrator * (as specified in setup), automatically assign access level 6. */ - if (!strcasecmp(CC->user.fullname, config.c_sysadm)) { - CC->user.axlevel = AxAideU; + if (!strcasecmp(CCC->user.fullname, config.c_sysadm)) { + CCC->user.axlevel = AxAideU; } /* If we're authenticating off the host system, automatically give * root the highest level of access. */ if (config.c_auth_mode == AUTHMODE_HOST) { - if (CC->user.uid == 0) { - CC->user.axlevel = AxAideU; + if (CCC->user.uid == 0) { + CCC->user.axlevel = AxAideU; } } - CtdlPutUserLock(&CC->user); + CtdlPutUserLock(&CCC->user); /* - * Populate CC->cs_inet_email with a default address. This will be + * Populate CCC->cs_inet_email with a default address. This will be * overwritten with the user's directory address, if one exists, when * the vCard module's login hook runs. */ - snprintf(CC->cs_inet_email, sizeof CC->cs_inet_email, "%s@%s", - CC->user.fullname, config.c_fqdn); - convert_spaces_to_underscores(CC->cs_inet_email); + snprintf(CCC->cs_inet_email, sizeof CCC->cs_inet_email, "%s@%s", + CCC->user.fullname, config.c_fqdn); + convert_spaces_to_underscores(CCC->cs_inet_email); /* Create any personal rooms required by the system. * (Technically, MAILROOM should be there already, but just in case...) @@ -801,7 +803,7 @@ void CtdlUserLogout(void) * If we were talking to a network node, we're not anymore... */ if (!IsEmptyStr(CCC->net_node)) { - network_talking_to(CCC->net_node, NTT_REMOVE); + network_talking_to(CCC->net_node, strlen(CCC->net_node), NTT_REMOVE); } /* Run any hooks registered by modules... */ @@ -856,8 +858,23 @@ static int validpw(uid_t uid, const char *pass) begin_critical_section(S_CHKPWD); rv = write(chkpwd_write_pipe[1], &uid, sizeof(uid_t)); + if (rv == -1) { + syslog(LOG_EMERG, "Communicatino with chkpwd broken: %s\n", strerror(errno)); + end_critical_section(S_CHKPWD); + return 0; + } rv = write(chkpwd_write_pipe[1], pass, 256); + if (rv == -1) { + syslog(LOG_EMERG, "Communicatino with chkpwd broken: %s\n", strerror(errno)); + end_critical_section(S_CHKPWD); + return 0; + } rv = read(chkpwd_read_pipe[0], buf, 4); + if (rv == -1) { + syslog(LOG_EMERG, "Communicatino with chkpwd broken: %s\n", strerror(errno)); + end_critical_section(S_CHKPWD); + return 0; + } end_critical_section(S_CHKPWD); if (!strncmp(buf, "PASS", 4)) { @@ -1260,7 +1277,7 @@ void cmd_newu(char *cmdbuf) { int a; long len; - char username[26]; + char username[SIZ]; if (config.c_auth_mode != AUTHMODE_NATIVE) { cprintf("%d This system does not use native mode authentication.\n", @@ -1335,8 +1352,6 @@ void CtdlSetPassword(char *new_pw) */ void cmd_setp(char *new_pw) { - int generate_random_password = 0; - if (CtdlAccessCheck(ac_logged_in)) { return; } @@ -1352,7 +1367,6 @@ void cmd_setp(char *new_pw) if (!strcasecmp(new_pw, "GENERATE_RANDOM_PASSWORD")) { char random_password[17]; - generate_random_password = 1; snprintf(random_password, sizeof random_password, "%08lx%08lx", random(), random()); CtdlSetPassword(random_password); cprintf("%d %s\n", CIT_OK, random_password); @@ -1385,17 +1399,16 @@ void cmd_creu(char *cmdbuf) } extract_token(username, cmdbuf, 0, '|', sizeof username); - extract_token(password, cmdbuf, 1, '|', sizeof password); - ////username[25] = 0; - //password[31] = 0; strproc(username); strproc(password); - len = cutuserkey(username); - if (IsEmptyStr(username)) { cprintf("%d You must supply a user name.\n", ERROR + USERNAME_REQUIRED); return; } + len = cutuserkey(username); + + + extract_token(password, cmdbuf, 1, '|', sizeof password); a = create_user(username, len, 0);