#include <string.h>
#include <time.h>
#include <stdarg.h>
+#include <stdint.h>
+
#include "../lib/sstring.h"
#include "../core/schedule.h"
#include "../lib/flags.h"
#include "chanserv_messages.h"
+#define CSMIN(a, b) ((a)<(b)?(a):(b))
+#define CSMAX(a, b) ((a)>(b)?(a):(b))
+
/* List of privileged operations */
#define QPRIV_SUSPENDBYPASS 1
#define UHasSuspension(x) ((x)->flags & (QUFLAG_GLINE|QUFLAG_DELAYEDGLINE|QUFLAG_SUSPENDED))
-#define UHasStaffPriv(x) ((x)->flags * (QUFLAG_STAFF | QUFLAG_HELPER | QUFLAG_OPER | QUFLAG_ADMIN | QUFLAG_DEV))
+#define UHasStaffPriv(x) ((x)->flags & (QUFLAG_STAFF | QUFLAG_HELPER | QUFLAG_OPER | QUFLAG_ADMIN | QUFLAG_DEV))
#define UHasHelperPriv(x) ((x)->flags & (QUFLAG_HELPER | QUFLAG_OPER | QUFLAG_ADMIN | QUFLAG_DEV))
#define UHasOperPriv(x) ((x)->flags & (QUFLAG_OPER | QUFLAG_ADMIN | QUFLAG_DEV))
#define UHasAdminPriv(x) ((x)->flags & (QUFLAG_ADMIN | QUFLAG_DEV))
#define QCMD_OPER 0x0020 /* Only available to opers */
#define QCMD_ADMIN 0x0040 /* Only available to admins */
#define QCMD_DEV 0x0080 /* Only available to developers */
+#define QCMD_STAFF 0x0200 /* Only available to staff */
#define QCMD_ALIAS 0x0100 /* Don't list on SHOWCOMMANDS */
+#define QCMD_HIDDEN QCMD_ALIAS
#define CS_INIT_DB 0x1 /* Loading database.. */
#define CS_INIT_NOUSER 0x2 /* Loaded DB, waiting for user to be created */
int stealcount; /* How many times we've had to free the nick up */
nick *fakeuser; /* If we had to "take" the nick, here's the pointer */
+ time_t lastpasschange;
+
struct reguser *nextbydomain;
struct reguser *nextbyname;
struct reguser *nextbyID;
const char *cs_cralgorithmlist(void);
int cs_checkhashpass(const char *username, const char *password, const char *junk, const char *hash);
char *csc_generateresetcode(time_t lockuntil, char *username);
+int csc_verifyqticket(char *data, char *digest);
/* chanservuser.c */
void chanservreguser(void *arg);
void csdb_createmaildomain(maildomain *mdp);
void csdb_updatemaildomain(maildomain *mdp);
void csdb_chanlevhistory_insert(regchan *rcp, nick *np, reguser *trup, flag_t oldflags, flag_t newflags);
-void csdb_accounthistory_insert(nick *np, char *oldpass, char *newpass, sstring *oldemail, sstring *newemail);
+void csdb_accounthistory_insert(nick *np, char *oldpass, char *newpass, char *oldemail, char *newemail);
void csdb_cleanuphistories();
void csdb_deletemaillock(maillock *mlp);
void csdb_createmaillock(maillock *mlp);