#include "../lib/sstring.h"
#include "../core/schedule.h"
#include "../lib/flags.h"
#include "../lib/sstring.h"
#include "../core/schedule.h"
#include "../lib/flags.h"
#include "../channel/channel.h"
#include "../parser/parser.h"
#include "../localuser/localuserchannel.h"
#include "../channel/channel.h"
#include "../parser/parser.h"
#include "../localuser/localuserchannel.h"
#define QPRIV_VIEWEMAIL 109
#define QPRIV_VIEWCHANSUSPENSION 110
#define QPRIV_VIEWSUSPENDEDBY 111
#define QPRIV_VIEWEMAIL 109
#define QPRIV_VIEWCHANSUSPENSION 110
#define QPRIV_VIEWSUSPENDEDBY 111
#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 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_OPER 0x0020 /* Only available to opers */
#define QCMD_ADMIN 0x0040 /* Only available to admins */
#define QCMD_DEV 0x0080 /* Only available to developers */
#define CS_INIT_DB 0x1 /* Loading database.. */
#define CS_INIT_NOUSER 0x2 /* Loaded DB, waiting for user to be created */
#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 */
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 */
struct reguser *nextbydomain;
struct reguser *nextbyname;
struct reguser *nextbyID;
struct reguser *nextbydomain;
struct reguser *nextbyname;
struct reguser *nextbyID;
extern DBModuleIdentifier q9dbid, q9adbid, q9cdbid, q9udbid;
extern DBModuleIdentifier q9dbid, q9adbid, q9cdbid, q9udbid;
extern maildomain *maildomainnametable[MAILDOMAINHASHSIZE];
extern maildomain *maildomainIDtable[MAILDOMAINHASHSIZE];
extern maildomain *maildomainnametable[MAILDOMAINHASHSIZE];
extern maildomain *maildomainIDtable[MAILDOMAINHASHSIZE];
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);
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);
/* chanservuser.c */
void chanservreguser(void *arg);
void chanservjoinchan(channel *cp);
#define chanservsendmessage(np, fmt, args...) chanservsendmessage_real(np, 0, fmt , ## args)
#define chanservsendmessageoneline(np, fmt, args...) chanservsendmessage_real(np, 1, fmt , ## args)
/* chanservuser.c */
void chanservreguser(void *arg);
void chanservjoinchan(channel *cp);
#define chanservsendmessage(np, fmt, args...) chanservsendmessage_real(np, 0, fmt , ## args)
#define chanservsendmessageoneline(np, fmt, args...) chanservsendmessage_real(np, 1, fmt , ## args)
-void chanservsendmessage_real(nick *np, int oneline, char *message, ... );
-void chanservwallmessage(char *message, ... );
+void chanservsendmessage_real(nick *np, int oneline, char *message, ... ) __attribute__ ((format (printf, 3, 4)));;
+void chanservwallmessage(char *message, ... ) __attribute__ ((format (printf, 1, 2)));
void chanservcommandinit();
void chanservcommandclose();
void chanservstdmessage(nick *np, int messageid, ... );
void chanservcommandinit();
void chanservcommandclose();
void chanservstdmessage(nick *np, int messageid, ... );
typedef int (*UnbanFN)(void *arg, struct chanban *ban);
int cs_unbanfn(nick *sender, chanindex *cip, UnbanFN fn, void *arg, int removepermbans, int abortonfailure);
void cs_logchanop(regchan *rcp, char *nick, reguser *rup);
typedef int (*UnbanFN)(void *arg, struct chanban *ban);
int cs_unbanfn(nick *sender, chanindex *cip, UnbanFN fn, void *arg, int removepermbans, int abortonfailure);
void cs_logchanop(regchan *rcp, char *nick, reguser *rup);
-void cs_log(nick *np, char *event, ...);
+void cs_log(nick *np, char *event, ...) __attribute__ ((format (printf, 2, 3)));
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_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);
void csdb_cleanuphistories();
void csdb_deletemaillock(maillock *mlp);
void csdb_createmaillock(maillock *mlp);
/* q9snprintf.c */
void q9snprintf(char *buf, size_t size, const char *format, const char *args, ...);
void q9vsnprintf(char *buf, size_t size, const char *format, const char *args, va_list ap);
/* q9snprintf.c */
void q9snprintf(char *buf, size_t size, const char *format, const char *args, ...);
void q9vsnprintf(char *buf, size_t size, const char *format, const char *args, va_list ap);