/*
* putuser() - write user buffer into the correct place on disk
*/
-void putuser(struct usersupp *usbuf, char *name)
+void putuser(struct usersupp *usbuf)
{
char lowercase_name[32];
int a;
- for (a=0; a<=strlen(name); ++a) {
+ for (a=0; a<=strlen(usbuf->fullname); ++a) {
if (a < sizeof(lowercase_name))
- lowercase_name[a] = tolower(name[a]);
+ lowercase_name[a] = tolower(usbuf->fullname[a]);
}
lowercase_name[sizeof(lowercase_name)-1] = 0;
/*
* lputuser() - same as putuser() but locks the record
*/
-void lputuser(struct usersupp *usbuf, char *name) {
- putuser(usbuf,name);
+void lputuser(struct usersupp *usbuf) {
+ putuser(usbuf);
end_critical_section(S_USERSUPP);
}
CC->usersupp.axlevel = 6;
}
- lputuser(&CC->usersupp,CC->curr_user);
+ lputuser(&CC->usersupp);
/* Run any cleanup routines registered by loadable modules */
PerformSessionHooks(EVT_LOGIN);
lgetuser(&CC->usersupp, CC->curr_user);
safestrncpy(CC->usersupp.password, password,
sizeof CC->usersupp.password);
- lputuser(&CC->usersupp, CC->curr_user);
+ lputuser(&CC->usersupp);
}
}
#endif
if (user_is_logged_in == 1) {
lprintf(5, "User <%s> is logged in; not deleting.\n", pname);
usbuf.axlevel = 0;
- putuser(&usbuf, pname);
+ putuser(&usbuf);
return(1);
}
}
/* add user to userlog */
- putuser(&CC->usersupp,CC->curr_user);
+ putuser(&CC->usersupp);
if (getuser(&CC->usersupp,CC->curr_user)) {
return(ERROR+INTERNAL_ERROR);
}
}
lgetuser(&CC->usersupp,CC->curr_user);
strcpy(CC->usersupp.password,new_pw);
- lputuser(&CC->usersupp,CC->curr_user);
+ lputuser(&CC->usersupp);
cprintf("%d Password changed.\n",OK);
rec_log(CL_PWCHANGE,CC->curr_user);
PerformSessionHooks(EVT_SETPASS);
CC->usersupp.flags = CC->usersupp.flags & (~US_USER_SET);
CC->usersupp.flags = CC->usersupp.flags |
(extract_int(new_parms,2) & US_USER_SET);
- lputuser(&CC->usersupp,CC->curr_user);
+ lputuser(&CC->usersupp);
cprintf("%d Ok\n",OK);
}
vbuf.v_lastseen = newlr;
CtdlSetRelationship(&vbuf, &CC->usersupp, &CC->quickroom);
- lputuser(&CC->usersupp, CC->curr_user);
+ lputuser(&CC->usersupp);
cprintf("%d %ld\n",OK,newlr);
}
CtdlSetRelationship(&vbuf, &USscratch, &CC->quickroom);
- lputuser(&USscratch,iuser);
+ lputuser(&USscratch);
/* post a message in Aide> saying what we just did */
- sprintf(bbb,"%s %s %s> by %s",
+ sprintf(bbb,"%s %s %s> by %s\n",
iuser,
((op == 1) ? "invited to" : "kicked out of"),
CC->quickroom.QRname,
vbuf.v_flags = vbuf.v_flags & ~V_ACCESS;
CtdlSetRelationship(&vbuf, &CC->usersupp, &CC->quickroom);
- lputuser(&CC->usersupp,CC->curr_user);
+ lputuser(&CC->usersupp);
cprintf("%d Ok\n",OK);
usergoto(BASEROOM, 0);
}
userbuf.axlevel = newax;
userbuf.flags = (userbuf.flags & ~US_NEEDVALID);
- lputuser(&userbuf,user);
+ lputuser(&userbuf);
/* If the access level was set to zero, delete the user */
if (newax == 0) {
strcpy(CC->usersupp.USphone,tmpphone);
strcpy(CC->usersupp.USemail,tmpemail);
CC->usersupp.flags=(CC->usersupp.flags|US_REGIS|US_NEEDVALID);
- lputuser(&CC->usersupp,CC->curr_user);
+ lputuser(&CC->usersupp);
/* set global flag calling for validation */
begin_critical_section(S_CONTROL);
usbuf.USuserpurge = extract_int(cmdbuf, 8);
}
- lputuser(&usbuf, requested_user);
+ lputuser(&usbuf);
if (usbuf.axlevel == 0) {
if (purge_user(requested_user)==0) {
cprintf("%d %s deleted.\n", OK, requested_user);
int NewMailCount() {
int num_newmsgs = 0;
int a;
- char mailboxname[32];
+ char mailboxname[ROOMNAMELEN];
struct quickroom mailbox;
struct visit vbuf;
+ struct cdbdata *cdbfr;
+ long *msglist = NULL;
+ int num_msgs = 0;
MailboxName(mailboxname, &CC->usersupp, MAILROOM);
if (getroom(&mailbox, mailboxname)!=0) return(0);
CtdlGetRelationship(&vbuf, &CC->usersupp, &mailbox);
- get_msglist(&mailbox);
- for (a=0; a<CC->num_msgs; ++a) {
- if (MessageFromList(a)>0L) {
- if (MessageFromList(a) > vbuf.v_lastseen) {
+ cdbfr = cdb_fetch(CDB_MSGLISTS, &mailbox.QRnumber, sizeof(long));
+
+ if (cdbfr != NULL) {
+ msglist = mallok(cdbfr->len);
+ memcpy(msglist, cdbfr->ptr, cdbfr->len);
+ num_msgs = cdbfr->len / sizeof(long);
+ cdb_free(cdbfr);
+ }
+
+ if (num_msgs > 0) for (a=0; a<num_msgs; ++a) {
+ if (msglist[a]>0L) {
+ if (msglist[a] > vbuf.v_lastseen) {
++num_newmsgs;
}
}
}
+ if (msglist != NULL) phree(msglist);
+
return(num_newmsgs);
}