struct cdbdata *cdbus;
int using_sysuser = 0;
- memset(usbuf, 0, sizeof(struct ctdluser));
+ if (usbuf != NULL) {
+ memset(usbuf, 0, sizeof(struct ctdluser));
+ }
#ifdef ENABLE_AUTOLOGIN
if (CtdlAssociateSystemUser(sysuser_name, name) == 0) {
if (cdbus == NULL) { /* user not found */
return(1);
}
- memcpy(usbuf, cdbus->ptr,
- ((cdbus->len > sizeof(struct ctdluser)) ?
- sizeof(struct ctdluser) : cdbus->len));
+ if (usbuf != NULL) {
+ memcpy(usbuf, cdbus->ptr,
+ ((cdbus->len > sizeof(struct ctdluser)) ?
+ sizeof(struct ctdluser) : cdbus->len));
+ }
cdb_free(cdbus);
return (0);
struct recptypes *valid = NULL;
if (trythisname == NULL) return login_not_found;
- safestrncpy(username, trythisname, sizeof username);
- strproc(username);
+ safestrncpy(username, trythisname, USERNAME_SIZE);
+ striplt(username);
if ((CC->logged_in)) {
return login_already_logged_in;
* is an e-mail address
*/
if (found_user != 0) {
- valid = validate_recipients(trythisname);
+ valid = validate_recipients(username);
if (valid != NULL) {
if (valid->num_local == 1) {
found_user = getuser(&CC->user,
valid->recp_local);
}
- phree(valid);
+ free(valid);
}
}
+#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) {
+ struct passwd *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)) {
case login_not_found:
cprintf("%d %s not found.\n", ERROR + NO_SUCH_USER, username);
return;
+ default:
cprintf("%d Internal error\n", ERROR + INTERNAL_ERROR);
}
}
/* Create any personal rooms required by the system.
* (Technically, MAILROOM should be there already, but just in case...)
*/
- create_room(MAILROOM, 4, "", 0, 1, 0);
- create_room(SENTITEMS, 4, "", 0, 1, 0);
+ create_room(MAILROOM, 4, "", 0, 1, 0, VIEW_BBS);
+ create_room(SENTITEMS, 4, "", 0, 1, 0, VIEW_BBS);
/* Run any startup routines registered by loadable modules */
PerformSessionHooks(EVT_LOGIN);
case pass_ok:
logged_in_response();
return;
- cprintf("%d Can't find user record!\n",
- ERROR + INTERNAL_ERROR);
}
}
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));
{
struct ctdluser usbuf;
struct ctdlroom qrbuf;
- struct passwd *p = NULL;
char username[SIZ];
char mailboxname[ROOMNAMELEN];
uid_t uid;
strproc(username);
#ifdef ENABLE_AUTOLOGIN
- p = (struct passwd *) getpwnam(username);
- if (p != NULL) {
- extract_token(username, p->pw_gecos, 0, ',');
- uid = p->pw_uid;
- } else {
- uid = (-1);
+ {
+ struct passwd *p = (struct passwd *) getpwnam(username);
+
+ if (p != NULL) {
+ extract_token(username, p->pw_gecos, 0, ',');
+ uid = p->pw_uid;
+ } else {
+ uid = (-1);
+ }
}
#else
uid = (-1);
* Make the latter an invisible system room.
*/
MailboxName(mailboxname, sizeof mailboxname, &usbuf, MAILROOM);
- create_room(mailboxname, 5, "", 0, 1, 1);
+ create_room(mailboxname, 5, "", 0, 1, 1, VIEW_BBS);
MailboxName(mailboxname, sizeof mailboxname, &usbuf, USERCONFIGROOM);
- create_room(mailboxname, 5, "", 0, 1, 1);
+ create_room(mailboxname, 5, "", 0, 1, 1, VIEW_BBS);
if (lgetroom(&qrbuf, mailboxname) == 0) {
qrbuf.QRflags2 |= QR2_SYSTEM;
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) {
cdbfr = cdb_fetch(CDB_MSGLISTS, &mailbox.QRnumber, sizeof(long));
if (cdbfr != NULL) {
- msglist = mallok(cdbfr->len);
+ msglist = malloc(cdbfr->len);
memcpy(msglist, cdbfr->ptr, cdbfr->len);
num_msgs = cdbfr->len / sizeof(long);
cdb_free(cdbfr);
}
}
if (msglist != NULL)
- phree(msglist);
+ free(msglist);
return (num_newmsgs);
}