char username[SIZ];
int found_user;
struct recptypes *valid = NULL;
+ struct passwd *p = NULL;
if (trythisname == NULL) return login_not_found;
safestrncpy(username, trythisname, sizeof username);
}
}
+#ifdef ENABLE_AUTOLOGIN
+ /* If we haven't found the account yet, and the supplied name
+ * is a login name on the underlying host system, create the
+ * account.
+ */
+ if (found_user != 0) {
+ p = (struct passwd *) getpwnam(username);
+ if (p != NULL) {
+ create_user(username, 0);
+ found_user = getuser(&CC->user, username);
+ }
+ }
+#endif /* ENABLE_AUTOLOGIN */
+
/* Did we find something? */
if (found_user == 0) {
if (((CC->nologin)) && (CC->user.axlevel < 6)) {
{
int i;
- lprintf(3, "Session %d: %s logged in",
- CC->cs_pid, CC->curr_user);
+ lprintf(CTDL_NOTICE, "<%s> logged in\n", CC->curr_user);
lgetuser(&CC->user, CC->curr_user);
++(CC->user.timescalled);
char buf[24];
if (pipe(pipev)) {
- lprintf(1, "pipe failed (%s): denying autologin access for "
+ lprintf(CTDL_ERR, "pipe failed (%s): denying autologin access for "
"uid %ld\n", strerror(errno), (long)uid);
return 0;
}
switch (pid = fork()) {
case -1:
- lprintf(1, "fork failed (%s): denying autologin access for "
+ lprintf(CTDL_ERR, "fork failed (%s): denying autologin access for "
"uid %ld\n", strerror(errno), (long)uid);
close(pipev[0]);
close(pipev[1]);
while (waitpid(pid, &status, 0) == -1)
if (errno != EINTR) {
- lprintf(1, "waitpid failed (%s): denying autologin "
+ lprintf(CTDL_ERR, "waitpid failed (%s): denying autologin "
"access for uid %ld\n",
strerror(errno), (long)uid);
return 0;
int code;
if ((CC->logged_in)) {
- lprintf(5, "CtdlTryPassword: already logged in\n");
+ lprintf(CTDL_WARNING, "CtdlTryPassword: already logged in\n");
return pass_already_logged_in;
}
if (!strcmp(CC->curr_user, NLI)) {
- lprintf(5, "CtdlTryPassword: no user selected\n");
+ lprintf(CTDL_WARNING, "CtdlTryPassword: no user selected\n");
return pass_no_user;
}
if (getuser(&CC->user, CC->curr_user)) {
- lprintf(5, "CtdlTryPassword: internal error\n");
+ lprintf(CTDL_ERR, "CtdlTryPassword: internal error\n");
return pass_internal_error;
}
if (password == NULL) {
- lprintf(5, "CtdlTryPassword: NULL password string supplied\n");
+ lprintf(CTDL_INFO, "CtdlTryPassword: NULL password string supplied\n");
return pass_wrong_password;
}
code = (-1);
do_login();
return pass_ok;
} else {
- lprintf(3, "Bad password specified for <%s>\n", CC->curr_user);
+ lprintf(CTDL_WARNING, "Bad password specified for <%s>\n", CC->curr_user);
return pass_wrong_password;
}
}
makeuserkey(usernamekey, pname);
if (getuser(&usbuf, pname) != 0) {
- lprintf(5, "Cannot purge user <%s> - not found\n", pname);
+ lprintf(CTDL_ERR, "Cannot purge user <%s> - not found\n", pname);
return (ERROR + NO_SUCH_USER);
}
/* Don't delete a user who is currently logged in. Instead, just
}
end_critical_section(S_SESSION_TABLE);
if (user_is_logged_in == 1) {
- lprintf(5, "User <%s> is logged in; not deleting.\n", pname);
+ lprintf(CTDL_WARNING, "User <%s> is logged in; not deleting.\n", pname);
usbuf.axlevel = 0;
putuser(&usbuf);
return (1);
}
- lprintf(5, "Deleting user <%s>\n", pname);
+ lprintf(CTDL_NOTICE, "Deleting user <%s>\n", pname);
/* Perform any purge functions registered by server extensions */
- PerformUserHooks(usbuf.fullname, usbuf.usernum, EVT_PURGEUSER);
+ PerformUserHooks(&usbuf, EVT_PURGEUSER);
/* delete any existing user/room relationships */
cdb_delete(CDB_VISIT, &usbuf.usernum, sizeof(long));
lputroom(&qrbuf);
}
+ /* Perform any create functions registered by server extensions */
+ PerformUserHooks(&usbuf, EVT_NEWUSER);
+
/* Everything below this line can be bypassed if administratively
- creating a user, instead of doing self-service account creation
+ * creating a user, instead of doing self-service account creation
*/
if (become_user) {
}
}
- lprintf(3, "New user <%s> created\n", username);
+ lprintf(CTDL_NOTICE, "New user <%s> created\n", username);
return (0);
}
safestrncpy(CC->user.password, new_pw, sizeof(CC->user.password));
lputuser(&CC->user);
cprintf("%d Password changed.\n", CIT_OK);
- lprintf(3, "Password changed for user <%s>\n", CC->curr_user);
+ lprintf(CTDL_INFO, "Password changed for user <%s>\n", CC->curr_user);
PerformSessionHooks(EVT_SETPASS);
}
}
-
/*
- * INVT and KICK commands
+ * API function for cmd_invt_kick() and anything else that needs to
+ * invite or kick out a user to/from a room.
+ *
+ * Set iuser to the name of the user, and op to 1=invite or 0=kick
*/
-void cmd_invt_kick(char *iuser, int op)
- /* user name */
-{ /* 1 = invite, 0 = kick out */
+int CtdlInvtKick(char *iuser, int op) {
struct ctdluser USscratch;
- char bbb[SIZ];
struct visit vbuf;
+ char bbb[SIZ];
+
+ if (getuser(&USscratch, iuser) != 0) {
+ return(1);
+ }
+
+ CtdlGetRelationship(&vbuf, &USscratch, &CC->room);
+ if (op == 1) {
+ vbuf.v_flags = vbuf.v_flags & ~V_FORGET & ~V_LOCKOUT;
+ vbuf.v_flags = vbuf.v_flags | V_ACCESS;
+ }
+ if (op == 0) {
+ vbuf.v_flags = vbuf.v_flags & ~V_ACCESS;
+ vbuf.v_flags = vbuf.v_flags | V_FORGET | V_LOCKOUT;
+ }
+ CtdlSetRelationship(&vbuf, &USscratch, &CC->room);
+
+ /* post a message in Aide> saying what we just did */
+ snprintf(bbb, sizeof bbb, "%s %s %s> by %s\n",
+ iuser,
+ ((op == 1) ? "invited to" : "kicked out of"),
+ CC->room.QRname,
+ CC->user.fullname);
+ aide_message(bbb);
+
+ return(0);
+}
+
+
+/*
+ * INVT and KICK commands
+ */
+void cmd_invt_kick(char *iuser, int op) {
/*
* These commands are only allowed by aides, room aides,
return;
}
- if (lgetuser(&USscratch, iuser) != 0) {
+ if (CtdlInvtKick(iuser, op) != 0) {
cprintf("%d No such user.\n", ERROR + NO_SUCH_USER);
return;
}
- CtdlGetRelationship(&vbuf, &USscratch, &CC->room);
-
- if (op == 1) {
- vbuf.v_flags = vbuf.v_flags & ~V_FORGET & ~V_LOCKOUT;
- vbuf.v_flags = vbuf.v_flags | V_ACCESS;
- }
- if (op == 0) {
- vbuf.v_flags = vbuf.v_flags & ~V_ACCESS;
- vbuf.v_flags = vbuf.v_flags | V_FORGET | V_LOCKOUT;
- }
- CtdlSetRelationship(&vbuf, &USscratch, &CC->room);
-
- lputuser(&USscratch);
-
- /* post a message in Aide> saying what we just did */
- snprintf(bbb, sizeof bbb, "%s %s %s> by %s\n",
- iuser,
- ((op == 1) ? "invited to" : "kicked out of"),
- CC->room.QRname,
- CC->user.fullname);
- aide_message(bbb);
cprintf("%d %s %s %s.\n",
CIT_OK, iuser,