X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/312aca694a81ff86424407fa3a3d469ed1d83215..c9d0dfa304f562302b25e718d01bed5f84ccd7a3:/nick/nick.h diff --git a/nick/nick.h b/nick/nick.h index 25205825..0e5cdc33 100644 --- a/nick/nick.h +++ b/nick/nick.h @@ -10,10 +10,15 @@ #include "../server/server.h" #include "../lib/base64.h" #include "../lib/irc_ipv6.h" -#include "../lib/patricia.h" +#include "../patricia/patricia.h" + +#include "../authext/authext.h" + #include -#define MAXNICKEXTS 6 +#ifndef MAXNICKEXTS +#define MAXNICKEXTS 10 +#endif #define UMODE_INV 0x0001 #define UMODE_WALLOPS 0x0002 @@ -28,36 +33,56 @@ #define UMODE_SETHOST 0x0400 #define UMODE_REGPRIV 0x0800 #define UMODE_HIDEIDLE 0x1000 - -#define UMODE_ALL 0x1FFF - -#define IsInvisible(x) ((x)->umodes & UMODE_INV) -#define IsWallops(x) ((x)->umodes & UMODE_WALLOPS) -#define IsDebug(x) ((x)->umodes & UMODE_DEBUG) -#define IsOper(x) ((x)->umodes & UMODE_OPER) -#define IsService(x) ((x)->umodes & UMODE_SERVICE) -#define IsXOper(x) ((x)->umodes & UMODE_XOPER) -#define IsDeaf(x) ((x)->umodes & UMODE_DEAF) -#define IsAccount(x) ((x)->umodes & UMODE_ACCOUNT) -#define IsHideChan(x) ((x)->umodes & UMODE_HIDECHAN) -#define IsHideHost(x) ((x)->umodes & UMODE_HIDEHOST) -#define IsSetHost(x) ((x)->umodes & UMODE_SETHOST) -#define IsRegPriv(x) ((x)->umodes & UMODE_REGPRIV) -#define IsHideIdle(x) ((x)->umodes & UMODE_HIDEIDLE) - -#define SetInvisible(x) ((x)->umodes |= UMODE_INV) -#define SetWallops(x) ((x)->umodes |= UMODE_WALLOPS) -#define SetDebug(x) ((x)->umodes |= UMODE_DEBUG) -#define SetOper(x) ((x)->umodes |= UMODE_OPER) -#define SetService(x) ((x)->umodes |= UMODE_SERVICE) -#define SetXOper(x) ((x)->umodes |= UMODE_XOPER) -#define SetDeaf(x) ((x)->umodes |= UMODE_DEAF) -#define SetAccount(x) ((x)->umodes |= UMODE_ACCOUNT) -#define SetHideChan(x) ((x)->umodes |= UMODE_HIDECHAN) -#define SetHideHost(x) ((x)->umodes |= UMODE_HIDEHOST) -#define SetSetHost(x) ((x)->umodes |= UMODE_SETHOST) -#define SetRegPriv(x) ((x)->umodes |= UMODE_REGPRIV) -#define SetHideIdle(x) ((x)->umodes |= UMODE_HIDEIDLE) +#define UMODE_PARANOID 0x2000 +#define UMODE_CLOAKED 0x4000 +#define UMODE_COMCHANS 0x8000 +#define UMODE_COMCHANSRESTR 0x10000 + +#define UMODE_ALL 0x1FFFF + +#define AFLAG_STAFF 0x0001 +#define AFLAG_SUPPORT 0x0002 +#define AFLAG_OPER 0x0004 +#define AFLAG_ADMIN 0x0008 +#define AFLAG_DEVELOPER 0x0010 + +#define AFLAG_ALL 0x001F + +#define IsInvisible(x) ((x)->umodes & UMODE_INV) +#define IsWallops(x) ((x)->umodes & UMODE_WALLOPS) +#define IsDebug(x) ((x)->umodes & UMODE_DEBUG) +#define IsOper(x) ((x)->umodes & UMODE_OPER) +#define IsService(x) ((x)->umodes & UMODE_SERVICE) +#define IsXOper(x) ((x)->umodes & UMODE_XOPER) +#define IsDeaf(x) ((x)->umodes & UMODE_DEAF) +#define IsAccount(x) ((x)->umodes & UMODE_ACCOUNT) +#define IsHideChan(x) ((x)->umodes & UMODE_HIDECHAN) +#define IsHideHost(x) ((x)->umodes & UMODE_HIDEHOST) +#define IsSetHost(x) ((x)->umodes & UMODE_SETHOST) +#define IsRegPriv(x) ((x)->umodes & UMODE_REGPRIV) +#define IsHideIdle(x) ((x)->umodes & UMODE_HIDEIDLE) +#define IsParanoid(x) ((x)->umodes & UMODE_PARANOID) +#define IsComChans(x) ((x)->umodes & UMODE_COMCHANS) +#define IsComChansRestr(x) ((x)->umodes & UMODE_COMCHANSRESTR) +#define IsCloaked(x) ((x)->umodes & UMODE_CLOAKED) + +#define SetInvisible(x) ((x)->umodes |= UMODE_INV) +#define SetWallops(x) ((x)->umodes |= UMODE_WALLOPS) +#define SetDebug(x) ((x)->umodes |= UMODE_DEBUG) +#define SetOper(x) ((x)->umodes |= UMODE_OPER) +#define SetService(x) ((x)->umodes |= UMODE_SERVICE) +#define SetXOper(x) ((x)->umodes |= UMODE_XOPER) +#define SetDeaf(x) ((x)->umodes |= UMODE_DEAF) +#define SetAccount(x) ((x)->umodes |= UMODE_ACCOUNT) +#define SetHideChan(x) ((x)->umodes |= UMODE_HIDECHAN) +#define SetHideHost(x) ((x)->umodes |= UMODE_HIDEHOST) +#define SetSetHost(x) ((x)->umodes |= UMODE_SETHOST) +#define SetRegPriv(x) ((x)->umodes |= UMODE_REGPRIV) +#define SetHideIdle(x) ((x)->umodes |= UMODE_HIDEIDLE) +#define SetParanoid(x) ((x)->umodes |= UMODE_PARANOID) +#define SetComChans(x) ((x)->umodes |= UMODE_COMCHANS) +#define SetComChansRestr(x) ((x)->umodes |= UMODE_COMCHANSRESTR) +#define SetCloaked(x) ((x)->umodes |= UMODE_CLOAKED) #define ClearInvisible(x) ((x)->umodes &= ~UMODE_INV) #define ClearWallops(x) ((x)->umodes &= ~UMODE_WALLOPS) @@ -72,6 +97,30 @@ #define ClearSetHost(x) ((x)->umodes &= ~UMODE_SETHOST) #define ClearRegPriv(x) ((x)->umodes &= ~UMODE_REGPRIV) #define ClearHideIdle(x) ((x)->umodes &= ~UMODE_HIDEIDLE) +#define ClearParanoid(x) ((x)->umodes &= ~UMODE_PARANOID) +#define SetComChans(x) ((x)->umodes &= ~UMODE_COMCHANS) +#define SetComChansRestr(x) ((x)->umodes &= ~UMODE_COMCHANSRESTR) +#define ClearCloaked(x) ((x)->umodes &= ~UMODE_CLOAKED) + +#define IsStaff(x) ((x)->flags & AFLAG_STAFF) +#define IsDeveloper(x) ((x)->flags & AFLAG_DEVELOPER) +#define IsSupport(x) ((x)->flags & AFLAG_SUPPORT) +#define IsAdmin(x) ((x)->flags & AFLAG_ADMIN) +#define IsOperFlag(x) ((x)->flags & AFLAG_OPER) + +#define SetStaff(x) ((x)->flags |= AFLAG_STAFF) +#define SetDeveloper(x) ((x)->flags |= AFLAG_DEVELOPER) +#define SetSupport(x) ((x)->flags |= AFLAG_SUPPORT) +#define SetAdmin(x) ((x)->flags |= AFLAG_ADMIN) +#define SetOperFlag(x) ((x)->flags |= AFLAG_OPER) + +#define ClearStaff(x) ((x)->flags &= ~AFLAG_STAFF) +#define ClearDeveloper(x) ((x)->flags &= ~AFLAG_DEVELOPER) +#define ClearSupport(x) ((x)->flags &= ~AFLAG_SUPPORT) +#define ClearAdmin(x) ((x)->flags &= ~AFLAG_ADMIN) +#define ClearOperFlag(x) ((x)->flags &= ~AFLAG_OPER) + +#define NickOnServiceServer(target) SIsService(&serverlist[homeserver((target)->numeric)]) typedef struct host { sstring *name; @@ -97,22 +146,27 @@ typedef struct nick { realname *realname; sstring *shident; /* +h users: fake ident/host goes here */ sstring *sethost; + sstring *opername; flag_t umodes; - char authname[ACCOUNTLEN+1]; + char *authname; + authname *auth; /* This requires User ID numbers to work */ time_t timestamp; time_t accountts; + sstring *away; + struct irc_in_addr ipaddress; patricia_node_t *ipnode; + unsigned int cloak_count; + struct nick *cloak_extra; unsigned int marker; struct nick *next; struct nick *nextbyhost; struct nick *nextbyrealname; + struct nick *nextbyauthname; /* These are extensions only used by other modules */ array *channels; void *exts[MAXNICKEXTS]; } nick; -#define p_ipaddr ipnode->prefix->sin - #define NICKHASHSIZE 60000 #define HOSTHASHSIZE 40000 #define REALNAMEHASHSIZE 40000 @@ -122,7 +176,8 @@ extern nick **servernicks[MAXSERVERS]; extern host *hosttable[HOSTHASHSIZE]; extern realname *realnametable[REALNAMEHASHSIZE]; extern const flag umodeflags[]; -extern patricia_tree_t *iptree; +extern const flag accountflags[]; +extern char *NULLAUTHNAME; #define MAXNUMERIC 0x3FFFFFFF @@ -137,13 +192,12 @@ extern patricia_tree_t *iptree; (((*gethandlebynumeric(x))->numeric==(x&MAXNUMERIC))?(*gethandlebynumeric(x)):NULL))) /* nickalloc.c functions */ -void initnickalloc(); realname *newrealname(); void freerealname(realname *rn); nick *newnick(); -void freenick (nick *np); +void freenick(nick *np); host *newhost(); -void freehost (host *hp); +void freehost(host *hp); /* nick.c functions */ void handleserverchange(int hooknum, void *arg); @@ -155,18 +209,22 @@ int registernickext(const char *name); int findnickext(const char *name); void releasenickext(int index); char *visiblehostmask(nick *np, char *buf); -int registernodeext(const char *name); -int findnodeext(const char *name); -void releasenodeext(int index); +char *visibleuserhost(nick *np, char *buf); +int canseeuser(nick *np, nick *cloaked); +void addcloaktarget(nick *cloaked, nick *target); +void removecloaktarget(nick *target); +void clearcloaktargets(nick *cloaked); /* nickhandlers.c functions */ int handlenickmsg(void *source, int cargc, char **cargv); int handlequitmsg(void *source, int cargc, char **cargv); int handlekillmsg(void *source, int cargc, char **cargv); int handleusermodemsg(void *source, int cargc, char **cargv); -int handlewhoismsg(void *source, int cargc, char **cargv); int handleaccountmsg(void *source, int cargc, char **cargv); -int handlestatsmsg(void *source, int cargc, char **cargv); +int handleprivmsg(void *source, int cargc, char **cargv); +int handleawaymsg(void *source, int cargc, char **cargv); +int handleaddcloak(void *source, int cargc, char **cargv); +int handleclearcloak(void *source, int cargc, char **cargv); /* These functions have been replaced by macros nick **gethandlebynumeric(long numeric); @@ -176,6 +234,7 @@ nick *getnickbynumericstr(char *numericstr); /* nickhelpers.c functions */ void initnickhelpers(); +void fininickhelpers(); host *findhost(const char *hostname); host *findorcreatehost(const char *hostname); void releasehost(host *hp);