*/
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...)
{
CitContext *CCC = MyContext();
- syslog(LOG_DEBUG, "CtdlUserLogout() logging out <%s>\n", CCC->curr_user);
+ syslog(LOG_DEBUG, "CtdlUserLogout() logging out <%s> from session %d",
+ CCC->curr_user, CCC->cs_pid
+ );
/*
* If there is a download in progress, abort it.
* 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... */
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)) {
int CtdlTryPassword(const char *password, long len)
{
int code;
+ CitContext *CCC = CC;
- if ((CC->logged_in)) {
+ if ((CCC->logged_in)) {
syslog(LOG_WARNING, "CtdlTryPassword: already logged in\n");
return pass_already_logged_in;
}
- if (!strcmp(CC->curr_user, NLI)) {
+ if (!strcmp(CCC->curr_user, NLI)) {
syslog(LOG_WARNING, "CtdlTryPassword: no user selected\n");
return pass_no_user;
}
- if (CtdlGetUser(&CC->user, CC->curr_user)) {
+ if (CtdlGetUser(&CCC->user, CCC->curr_user)) {
syslog(LOG_ERR, "CtdlTryPassword: internal error\n");
return pass_internal_error;
}
}
code = (-1);
- if (CC->is_master) {
+ if (CCC->is_master) {
code = strcmp(password, config.c_master_pass);
}
/* host auth mode */
- if (validpw(CC->user.uid, password)) {
+ if (validpw(CCC->user.uid, password)) {
code = 0;
/*
* this is a security hazard, comment it out.
*/
- CtdlGetUserLock(&CC->user, CC->curr_user);
- safestrncpy(CC->user.password, password, sizeof CC->user.password);
- CtdlPutUserLock(&CC->user);
+ CtdlGetUserLock(&CCC->user, CCC->curr_user);
+ safestrncpy(CCC->user.password, password, sizeof CCC->user.password);
+ CtdlPutUserLock(&CCC->user);
/*
* (sooper-seekrit hack ends here)
/* LDAP auth mode */
- if ((CC->ldap_dn) && (!CtdlTryPasswordLDAP(CC->ldap_dn, password))) {
+ if ((CCC->ldap_dn) && (!CtdlTryPasswordLDAP(CCC->ldap_dn, password))) {
code = 0;
}
else {
pw = (char*) malloc(len + 1);
memcpy(pw, password, len + 1);
strproc(pw);
- strproc(CC->user.password);
- code = strcasecmp(CC->user.password, pw);
+ strproc(CCC->user.password);
+ code = strcasecmp(CCC->user.password, pw);
strproc(pw);
- strproc(CC->user.password);
- code = strcasecmp(CC->user.password, pw);
+ strproc(CCC->user.password);
+ code = strcasecmp(CCC->user.password, pw);
free (pw);
}
do_login();
return pass_ok;
} else {
- syslog(LOG_WARNING, "Bad password specified for <%s>\n", CC->curr_user);
+ syslog(LOG_WARNING, "Bad password specified for <%s> Service <%s> Port <%ld> Remote <%s / %s>\n",
+ CCC->curr_user,
+ CCC->ServiceName,
+ CCC->tcp_port,
+ CCC->cs_host,
+ CCC->cs_addr);
+
+
+//citserver[5610]: Bad password specified for <willi> Service <citadel-TCP> Remote <PotzBlitz / >
+
return pass_wrong_password;
}
}
{
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",
*/
void cmd_setp(char *new_pw)
{
- int generate_random_password = 0;
-
if (CtdlAccessCheck(ac_logged_in)) {
return;
}
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);
}
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);
CtdlRegisterProtoHook(cmd_invt, "INVT", "Invite a user to a room");
CtdlRegisterProtoHook(cmd_kick, "KICK", "Kick a user out of a room");
CtdlRegisterProtoHook(cmd_forg, "FORG", "Forget a room");
- CtdlRegisterProtoHook(cmd_gnur, "GNUR", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_gnur, "GNUR", "Get Next Unregistered User");
CtdlRegisterProtoHook(cmd_vali, "VALI", "Validate new users");
CtdlRegisterProtoHook(cmd_list, "LIST", "List users");
- CtdlRegisterProtoHook(cmd_chek, "CHEK", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_qusr, "QUSR", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_agup, "AGUP", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_asup, "ASUP", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_seen, "SEEN", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_gtsn, "GTSN", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_view, "VIEW", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_renu, "RENU", "Autoconverted. TODO: document me.");
- CtdlRegisterProtoHook(cmd_newu, "NEWU", "Autoconverted. TODO: document me.");
+ CtdlRegisterProtoHook(cmd_chek, "CHEK", "assorted info we need to check at login");
+ CtdlRegisterProtoHook(cmd_qusr, "QUSR", "check to see if a user exists");
+ CtdlRegisterProtoHook(cmd_agup, "AGUP", "Administratively Get User Parameters");
+ CtdlRegisterProtoHook(cmd_asup, "ASUP", "Administratively Set User Parameters");
+ CtdlRegisterProtoHook(cmd_seen, "SEEN", "Manipulate seen/unread message flags");
+ CtdlRegisterProtoHook(cmd_gtsn, "GTSN", "Fetch seen/unread message flags");
+ CtdlRegisterProtoHook(cmd_view, "VIEW", "Set preferred view for user/room combination");
+ CtdlRegisterProtoHook(cmd_renu, "RENU", "Rename a user");
+ CtdlRegisterProtoHook(cmd_newu, "NEWU", "Log in as a new user");
}
/* return our Subversion id for the Log */
return "user_ops";