]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - include/s_newconf.h
Disable autoconnect for a server with excessive TS delta.
[irc/rqf/shadowircd.git] / include / s_newconf.h
index 3a2a5064c271bcd794b5d30d675d5d120c71db11..c0cc561d6ce7b28173605c54a03182ba7b9a401c 100644 (file)
@@ -36,7 +36,7 @@
 #define INCLUDED_s_newconf_h
 
 #include "setup.h"
-#include "tools.h"
+#include "privilege.h"
 
 #ifdef HAVE_LIBCRYPTO
 #include <openssl/rsa.h>
 
 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);