/* $Id$ */
#include "bbs.h"
#ifdef _BBS_UTIL_C_
#error sorry, mbbsd/passwd.c does not support utility mode anymore. please use libcmbbs instead.
#endif
static uint32_t latest_numposts;
void
passwd_force_update(int flag)
{
if(!currutmp || (currutmp->alerts & ALERT_PWD) == 0)
return;
currutmp->alerts &= ~flag;
}
int
initcuser(const char *userid)
{
usernum = passwd_load_user(userid, &cuser);
latest_numposts = cuser.numposts;
return usernum;
}
// XXX I don't like the stupid synchronization here,
// but simply following previous work here...
int
passwd_sync_update(int num, userec_t * buf)
{
int alerts;
if (num < 1 || num > MAX_USERS)
return -1;
// money update should be done before everything.
buf->money = moneyof(num);
if(usernum == num && currutmp && ((alerts = currutmp->alerts) & ALERT_PWD))
{
userec_t u;
if (passwd_sync_query(num, &u) != 0)
return -1;
if(alerts & ALERT_PWD_BADPOST)
cuser.badpost = buf->badpost = u.badpost;
if(alerts & ALERT_PWD_GOODPOST)
cuser.goodpost = buf->goodpost = u.goodpost;
if(alerts & ALERT_PWD_PERM)
cuser.userlevel = buf->userlevel = u.userlevel;
if(alerts & ALERT_PWD_JUSTIFY)
{
memcpy(buf->justify, u.justify, sizeof(u.justify));
memcpy(cuser.justify, u.justify, sizeof(u.justify));
memcpy(buf->email, u.email, sizeof(u.email));
memcpy(cuser.email, u.email, sizeof(u.email));
}
cuser.numposts += u.numposts - latest_numposts;
// XXX bad workaround - but.... let's use it until we've solved the sync issue
if ((int)cuser.numposts < 0)
cuser.numposts = 0;
currutmp->alerts &= ~ALERT_PWD;
// ALERT_PWD_RELOAD: reload all! No need to write.
if (alerts & ALERT_PWD_RELOAD)
{
memcpy(&cuser, &u, sizeof(u));
return 0;
}
}
if (passwd_update(num, buf) != 0)
return -1;
if (currutmp && usernum > 0 &&
latest_numposts != cuser.numposts)
{
sendalert_uid(usernum, ALERT_PWD_POSTS);
latest_numposts = cuser.numposts;
}
return 0;
}
// XXX I don't like the stupid synchronization here,
// but simply following previous work here...
int
passwd_sync_query(int num, userec_t * buf)
{
if (passwd_query(num, buf) < 0)
return -1;
if (buf == &cuser)
latest_numposts = cuser.numposts;
return 0;
}