X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/f726dd0928006951a9a03f101fdb0c4d29db86b2..6b2cf989b6f77ca06d6d46efa3b26c0ea22d76e4:/include/s_newconf.h diff --git a/include/s_newconf.h b/include/s_newconf.h index 3a2a506..c0cc561 100644 --- a/include/s_newconf.h +++ b/include/s_newconf.h @@ -36,7 +36,7 @@ #define INCLUDED_s_newconf_h #include "setup.h" -#include "tools.h" +#include "privilege.h" #ifdef HAVE_LIBCRYPTO #include @@ -44,17 +44,17 @@ struct ConfItem; -extern dlink_list cluster_conf_list; -extern dlink_list shared_conf_list; -extern dlink_list oper_conf_list; -extern dlink_list hubleaf_conf_list; -extern dlink_list server_conf_list; -extern dlink_list xline_conf_list; -extern dlink_list resv_conf_list; -extern dlink_list nd_list; -extern dlink_list tgchange_list; +extern rb_dlink_list cluster_conf_list; +extern rb_dlink_list shared_conf_list; +extern rb_dlink_list oper_conf_list; +extern rb_dlink_list hubleaf_conf_list; +extern rb_dlink_list server_conf_list; +extern rb_dlink_list xline_conf_list; +extern rb_dlink_list resv_conf_list; +extern rb_dlink_list nd_list; +extern rb_dlink_list tgchange_list; -struct _patricia_tree_t *tgchange_tree; +extern struct _rb_patricia_tree_t *tgchange_tree; extern void init_s_newconf(void); extern void clear_s_newconf(void); @@ -67,8 +67,8 @@ typedef struct { char *ip; time_t expiry; - patricia_node_t *pnode; - dlink_node node; + rb_patricia_node_t *pnode; + rb_dlink_node node; } tgchange; void add_tgchange(const char *host); @@ -81,7 +81,7 @@ struct remote_conf char *host; char *server; int flags; - dlink_node node; + rb_dlink_node node; }; /* flags used in shared/cluster */ @@ -96,6 +96,9 @@ struct remote_conf #define SHARED_PRESV 0x0100 #define SHARED_UNRESV 0x0200 #define SHARED_REHASH 0x0400 +#define SHARED_TDLINE 0x0800 +#define SHARED_PDLINE 0x1000 +#define SHARED_UNDLINE 0x2000 #define SHARED_ALL (SHARED_TKLINE | SHARED_PKLINE | SHARED_UNKLINE |\ SHARED_PXLINE | SHARED_TXLINE | SHARED_UNXLINE |\ @@ -118,6 +121,8 @@ struct oper_conf unsigned int snomask; + struct PrivilegeSet *privset; + #ifdef HAVE_LIBCRYPTO char *rsa_pubkey_file; RSA *rsa_pubkey; @@ -135,53 +140,33 @@ extern void cluster_generic(struct Client *, const char *, int cltype, int cap, const char *format, ...); #define OPER_ENCRYPTED 0x00001 -#define OPER_KLINE 0x00002 -#define OPER_UNKLINE 0x00004 -#define OPER_LOCKILL 0x00008 -#define OPER_GLOBKILL 0x00010 -#define OPER_REMOTE 0x00020 -#define OPER_GLINE 0x00040 -#define OPER_XLINE 0x00080 -#define OPER_RESV 0x00100 -#define OPER_NICKS 0x00200 -#define OPER_REHASH 0x00400 -#define OPER_DIE 0x00800 -#define OPER_ADMIN 0x01000 -#define OPER_HADMIN 0x02000 -#define OPER_OPERWALL 0x04000 -#define OPER_INVIS 0x08000 -#define OPER_SPY 0x10000 -#define OPER_REMOTEBAN 0x20000 -#define OPER_MASSNOTICE 0x40000 +#define OPER_NEEDSSL 0x80000 /* 0x400000 and above are in client.h */ -#define OPER_FLAGS (OPER_KLINE|OPER_UNKLINE|OPER_LOCKILL|OPER_GLOBKILL|\ - OPER_REMOTE|OPER_GLINE|OPER_XLINE|OPER_RESV|\ - OPER_NICKS|OPER_REHASH|OPER_DIE|OPER_ADMIN|\ - OPER_HADMIN|OPER_OPERWALL|OPER_INVIS|OPER_SPY|\ - OPER_REMOTEBAN|OPER_MASSNOTICE) +#define OPER_FLAGS 0 /* no oper privs in Client.flags2/oper_conf.flags currently */ #define IsOperConfEncrypted(x) ((x)->flags & OPER_ENCRYPTED) - -#define IsOperGlobalKill(x) ((x)->flags2 & OPER_GLOBKILL) -#define IsOperLocalKill(x) ((x)->flags2 & OPER_LOCKILL) -#define IsOperRemote(x) ((x)->flags2 & OPER_REMOTE) -#define IsOperUnkline(x) ((x)->flags2 & OPER_UNKLINE) -#define IsOperGline(x) ((x)->flags2 & OPER_GLINE) -#define IsOperN(x) ((x)->flags2 & OPER_NICKS) -#define IsOperK(x) ((x)->flags2 & OPER_KLINE) -#define IsOperXline(x) ((x)->flags2 & OPER_XLINE) -#define IsOperResv(x) ((x)->flags2 & OPER_RESV) -#define IsOperDie(x) ((x)->flags2 & OPER_DIE) -#define IsOperRehash(x) ((x)->flags2 & OPER_REHASH) -#define IsOperHiddenAdmin(x) ((x)->flags2 & OPER_HADMIN) -#define IsOperAdmin(x) (((x)->flags2 & OPER_ADMIN) || \ - ((x)->flags2 & OPER_HADMIN)) -#define IsOperOperwall(x) ((x)->flags2 & OPER_OPERWALL) -#define IsOperSpy(x) ((x)->flags2 & OPER_SPY) -#define IsOperInvis(x) ((x)->flags2 & OPER_INVIS) -#define IsOperRemoteBan(x) ((x)->flags2 & OPER_REMOTEBAN) -#define IsOperMassNotice(x) ((x)->flags2 & OPER_MASSNOTICE) +#define IsOperConfNeedSSL(x) ((x)->flags & OPER_NEEDSSL) + +#define HasPrivilege(x, y) ((x)->localClient != NULL && (x)->localClient->privset != NULL && privilegeset_in_set((x)->localClient->privset, (y))) + +#define IsOperGlobalKill(x) (HasPrivilege((x), "oper:global_kill")) +#define IsOperLocalKill(x) (HasPrivilege((x), "oper:local_kill")) +#define IsOperRemote(x) (HasPrivilege((x), "oper:routing")) +#define IsOperUnkline(x) (HasPrivilege((x), "oper:unkline")) +#define IsOperN(x) (HasPrivilege((x), "snomask:nick_changes")) +#define IsOperK(x) (HasPrivilege((x), "oper:kline")) +#define IsOperXline(x) (HasPrivilege((x), "oper:xline")) +#define IsOperResv(x) (HasPrivilege((x), "oper:resv")) +#define IsOperDie(x) (HasPrivilege((x), "oper:die")) +#define IsOperRehash(x) (HasPrivilege((x), "oper:rehash")) +#define IsOperHiddenAdmin(x) (HasPrivilege((x), "oper:hidden_admin")) +#define IsOperAdmin(x) (HasPrivilege((x), "oper:admin") || HasPrivilege((x), "oper:hidden_admin")) +#define IsOperOperwall(x) (HasPrivilege((x), "oper:operwall")) +#define IsOperSpy(x) (HasPrivilege((x), "oper:spy")) +#define IsOperInvis(x) (HasPrivilege((x), "oper:hidden")) +#define IsOperRemoteBan(x) (HasPrivilege((x), "oper:remoteban")) +#define IsOperMassNotice(x) (HasPrivilege((x), "oper:mass_notice")) extern struct oper_conf *make_oper_conf(void); extern void free_oper_conf(struct oper_conf *); @@ -204,11 +189,11 @@ struct server_conf time_t hold; int aftype; - struct irc_sockaddr_storage my_ipnum; + struct rb_sockaddr_storage my_ipnum; char *class_name; struct Class *class; - dlink_node node; + rb_dlink_node node; }; #define SERVER_ILLEGAL 0x0001 @@ -217,6 +202,7 @@ struct server_conf #define SERVER_COMPRESSED 0x0008 #define SERVER_TB 0x0010 #define SERVER_AUTOCONN 0x0020 +#define SERVER_SSL 0x0040 #define ServerConfIllegal(x) ((x)->flags & SERVER_ILLEGAL) #define ServerConfVhosted(x) ((x)->flags & SERVER_VHOSTED) @@ -224,6 +210,7 @@ struct server_conf #define ServerConfCompressed(x) ((x)->flags & SERVER_COMPRESSED) #define ServerConfTb(x) ((x)->flags & SERVER_TB) #define ServerConfAutoconn(x) ((x)->flags & SERVER_AUTOCONN) +#define ServerConfSSL(x) ((x)->flags & SERVER_SSL) extern struct server_conf *make_server_conf(void); extern void free_server_conf(struct server_conf *); @@ -234,8 +221,9 @@ extern struct server_conf *find_server_conf(const char *name); extern void attach_server_conf(struct Client *, struct server_conf *); extern void detach_server_conf(struct Client *); -extern void set_server_conf_autoconn(struct Client *source_p, char *name, +extern void set_server_conf_autoconn(struct Client *source_p, const char *name, int newval); +extern void disable_server_conf_autoconn(const char *name); extern struct ConfItem *find_xline(const char *, int); @@ -251,7 +239,7 @@ struct nd_entry { char name[NICKLEN+1]; time_t expire; - dlink_node lnode; /* node in ll */ + rb_dlink_node lnode; /* node in ll */ }; extern void add_nd_entry(const char *name);