X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/39aa69773b581502b6235b3f72655fd8d89f25e0..8c684fca9c7dbb4a2601628c744be9236ee68641:/chanserv/chanserv.h diff --git a/chanserv/chanserv.h b/chanserv/chanserv.h index 6aa48a2c..745356dd 100644 --- a/chanserv/chanserv.h +++ b/chanserv/chanserv.h @@ -11,6 +11,8 @@ #include #include #include +#include + #include "../lib/sstring.h" #include "../core/schedule.h" #include "../lib/flags.h" @@ -18,7 +20,10 @@ #include "../channel/channel.h" #include "../parser/parser.h" #include "../localuser/localuserchannel.h" + +#ifndef CS_NODB #include "../dbapi/dbapi.h" +#endif #define CS_PARANOID @@ -48,10 +53,10 @@ #define MAXSUSPENDHIT 500 /* Maximum number of times a user may attempt to auth */ -#define MAXAUTHATTEMPT 5 +#define MAXAUTHATTEMPT 10 /* Maximum number of hellos in a session */ -#define MAXHELLOS 3 +#define MAXHELLOS 2 /* Maximum number of times a user may actually be authed */ #define MAXAUTHCOUNT 2 @@ -85,8 +90,14 @@ #define ENTROPYSOURCE "/dev/urandom" #define ENTROPYLEN 8 +/* Minimum acceptable reason length for stuff like deluser */ +#define MIN_REASONLEN 20 + #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 @@ -102,6 +113,7 @@ #define QPRIV_VIEWEMAIL 109 #define QPRIV_VIEWCHANSUSPENSION 110 #define QPRIV_VIEWSUSPENDEDBY 111 +#define QPRIV_VIEWWALLMESSAGE 112 #define QPRIV_CHANGECHANFLAGS 200 #define QPRIV_CHANGECHANLEV 201 @@ -167,7 +179,7 @@ #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)) @@ -385,8 +397,10 @@ #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 */ @@ -540,6 +554,8 @@ typedef struct reguser { 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; @@ -651,7 +667,10 @@ extern unsigned int lastmaillockID; extern int chanserv_init_status; extern int chanservdb_ready; + +#ifndef CS_NODB extern DBModuleIdentifier q9dbid, q9adbid, q9cdbid, q9udbid; +#endif extern maildomain *maildomainnametable[MAILDOMAINHASHSIZE]; extern maildomain *maildomainIDtable[MAILDOMAINHASHSIZE]; @@ -771,14 +790,15 @@ CRAlgorithm cs_cralgorithm(const char *algorithm); 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 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, ... ); @@ -812,6 +832,7 @@ flag_t cs_sanitisechanlev(flag_t flags); 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); +int checkreason(nick *np, char *reason); /* chanservstdcmds.c */ int cs_doshowcommands(void *source, int cargc, char **cargv); @@ -850,7 +871,7 @@ chanindex *cs_checkaccess(nick *np, const char *chan, unsigned int flags, chanin /* chanservlog.c */ void cs_initlog(); void cs_closelog(); -void cs_log(nick *np, char *event, ...); +void cs_log(nick *np, char *event, ...) __attribute__ ((format (printf, 2, 3))); /* chanservdump.c */ int dumplastjoindata(const char *filename); @@ -886,7 +907,7 @@ void csdb_deletemaildomain(maildomain *mdp); 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); @@ -895,4 +916,10 @@ void csdb_updatemaillock(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); +void q9strftime(char *buf, size_t size, time_t t); + +/* chanserv_flags.c */ +u_int64_t cs_accountflagmap(reguser *rup); +u_int64_t cs_accountflagmap_str(char *flags); + #endif