]> jfr.im git - solanum.git/blobdiff - include/s_newconf.h
Make valid_temp_time overflow-resistant
[solanum.git] / include / s_newconf.h
index bd3282c69145308f8464a96f7a825c03f3b0da3c..87319892385b6cf893fc704b3d77b2c31ea9346c 100644 (file)
  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
- *
- * $Id: s_newconf.h 1747 2006-07-25 21:22:45Z jilles $
  */
 
 #ifndef INCLUDED_s_newconf_h
 #define INCLUDED_s_newconf_h
 
 #include "setup.h"
+#include "privilege.h"
 
 #ifdef HAVE_LIBCRYPTO
 #include <openssl/rsa.h>
 #endif
 
+#define MAX_TEMP_TIME (52 * 7 * 24 * 60 * 60)
+
+struct Client;
 struct ConfItem;
 
 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 _rb_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);
 extern void clear_s_newconf_bans(void);
 
-#define FREE_TARGET(x) ((x)->localClient->targinfo[0])
-#define USED_TARGETS(x) ((x)->localClient->targinfo[1])
-
 typedef struct
 {
        char *ip;
@@ -73,7 +70,7 @@ typedef struct
 void add_tgchange(const char *host);
 tgchange *find_tgchange(const char *host);
 
-/* shared/cluster/hub/leaf confs */
+/* cluster confs */
 struct remote_conf
 {
        char *username;
@@ -84,39 +81,44 @@ struct remote_conf
 };
 
 /* flags used in shared/cluster */
-#define SHARED_TKLINE  0x0001
-#define SHARED_PKLINE  0x0002
-#define SHARED_UNKLINE 0x0004
-#define SHARED_LOCOPS  0x0008
-#define SHARED_TXLINE  0x0010
-#define SHARED_PXLINE  0x0020
-#define SHARED_UNXLINE 0x0040
-#define SHARED_TRESV   0x0080
-#define SHARED_PRESV   0x0100
-#define SHARED_UNRESV  0x0200
-#define SHARED_REHASH  0x0400
+#define SHARED_TKLINE  0x00001
+#define SHARED_PKLINE  0x00002
+#define SHARED_UNKLINE 0x00004
+#define SHARED_LOCOPS  0x00008
+#define SHARED_TXLINE  0x00010
+#define SHARED_PXLINE  0x00020
+#define SHARED_UNXLINE 0x00040
+#define SHARED_TRESV   0x00080
+#define SHARED_PRESV   0x00100
+#define SHARED_UNRESV  0x00200
+#define SHARED_REHASH  0x00400
+#define SHARED_TDLINE  0x00800
+#define SHARED_PDLINE  0x01000
+#define SHARED_UNDLINE 0x02000
+#define SHARED_GRANT   0x04000
+#define SHARED_DIE     0x08000
+#define SHARED_MODULE  0x10000
 
 #define SHARED_ALL     (SHARED_TKLINE | SHARED_PKLINE | SHARED_UNKLINE |\
                        SHARED_PXLINE | SHARED_TXLINE | SHARED_UNXLINE |\
-                       SHARED_TRESV | SHARED_PRESV | SHARED_UNRESV)
+                       SHARED_TRESV | SHARED_PRESV | SHARED_UNRESV | SHARED_GRANT)
 #define CLUSTER_ALL    (SHARED_ALL | SHARED_LOCOPS)
 
-/* flags used in hub/leaf */
-#define CONF_HUB       0x0001
-#define CONF_LEAF      0x0002
-
 struct oper_conf
 {
        char *name;
        char *username;
        char *host;
        char *passwd;
+       char *certfp;
 
        int flags;
        int umodes;
 
        unsigned int snomask;
 
+       struct PrivilegeSet *privset;
+
 #ifdef HAVE_LIBCRYPTO
        char *rsa_pubkey_file;
        RSA *rsa_pubkey;
@@ -126,61 +128,41 @@ struct oper_conf
 extern struct remote_conf *make_remote_conf(void);
 extern void free_remote_conf(struct remote_conf *);
 
-extern int find_shared_conf(const char *username, const char *host,
-                       const char *server, int flags);
 extern void propagate_generic(struct Client *source_p, const char *command,
                const char *target, int cap, const char *format, ...);
 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
-/* 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_NEEDSSL    0x80000
 
-#define IsOperConfEncrypted(x) ((x)->flags & OPER_ENCRYPTED)
+#define OPER_FLAGS     0        /* no oper privs in Client.flags/oper_conf.flags currently */
 
-#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 IsOperConfEncrypted(x) ((x)->flags & OPER_ENCRYPTED)
+#define IsOperConfNeedSSL(x)   ((x)->flags & OPER_NEEDSSL)
+
+#define HasPrivilege(x, y)     ((x)->user != NULL && (x)->user->privset != NULL && privilegeset_in_set((x)->user->privset, (y)))
+#define MayHavePrivilege(x, y) (HasPrivilege((x), (y)) || (IsOper((x)) && (x)->user != NULL && (x)->user->privset == NULL))
+
+#define IsOperKill(x)           (HasPrivilege((x), "oper: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"))
+#define IsOperGeneral(x)        (MayHavePrivilege((x), "oper:general"))
+
+#define SeesOper(target, source)       (IsOper((target)) && ((!ConfigFileEntry.hide_opers && !HasPrivilege((target), "oper:hidden")) || HasPrivilege((source), "auspex:oper")))
 
 extern struct oper_conf *make_oper_conf(void);
 extern void free_oper_conf(struct oper_conf *);
@@ -194,16 +176,25 @@ extern const char *get_oper_privs(int flags);
 struct server_conf
 {
        char *name;
-       char *host;
+       char *connect_host;
+       struct rb_sockaddr_storage connect4;
+       uint16_t dns_query_connect4;
+       struct rb_sockaddr_storage connect6;
+       uint16_t dns_query_connect6;
        char *passwd;
        char *spasswd;
+       char *certfp;
        int port;
        int flags;
        int servers;
        time_t hold;
 
        int aftype;
-       struct irc_sockaddr_storage my_ipnum;
+       char *bind_host;
+       struct rb_sockaddr_storage bind4;
+       uint16_t dns_query_bind4;
+       struct rb_sockaddr_storage bind6;
+       uint16_t dns_query_bind6;
 
        char *class_name;
        struct Class *class;
@@ -211,18 +202,22 @@ struct server_conf
 };
 
 #define SERVER_ILLEGAL         0x0001
-#define SERVER_VHOSTED         0x0002
 #define SERVER_ENCRYPTED       0x0004
 #define SERVER_COMPRESSED      0x0008
 #define SERVER_TB              0x0010
 #define SERVER_AUTOCONN                0x0020
+#define SERVER_SSL             0x0040
+#define SERVER_NO_EXPORT       0x0080
+#define SERVER_SCTP            0x0100
 
 #define ServerConfIllegal(x)   ((x)->flags & SERVER_ILLEGAL)
-#define ServerConfVhosted(x)   ((x)->flags & SERVER_VHOSTED)
 #define ServerConfEncrypted(x) ((x)->flags & SERVER_ENCRYPTED)
 #define ServerConfCompressed(x)        ((x)->flags & SERVER_COMPRESSED)
 #define ServerConfTb(x)                ((x)->flags & SERVER_TB)
 #define ServerConfAutoconn(x)  ((x)->flags & SERVER_AUTOCONN)
+#define ServerConfSCTP(x)      ((x)->flags & SERVER_SCTP)
+#define ServerConfSSL(x)       ((x)->flags & SERVER_SSL)
+#define ServerConfNoExport(x)  ((x)->flags & SERVER_NO_EXPORT)
 
 extern struct server_conf *make_server_conf(void);
 extern void free_server_conf(struct server_conf *);
@@ -233,8 +228,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);