Author: Alex Badea <vampire@p16.pub.ro>
[ircu2.10.12-pk.git] / include / s_conf.h
1 /*
2  * s_conf.h
3  *
4  * $Id$ 
5  */
6 #ifndef INCLUDED_s_conf_h
7 #define INCLUDED_s_conf_h
8 #ifndef INCLUDED_time_h
9 #include <time.h>              /* struct tm */
10 #define INCLUDED_time_h
11 #endif
12 #ifndef INCLUDED_sys_types_h
13 #include <sys/types.h>
14 #define INCLUDED_sys_types_h
15 #endif
16 #ifndef INCLUDED_netinet_in_h
17 #include <netinet/in.h>        /* struct in_addr */
18 #define INCLUDED_netinet_in_h
19 #endif
20 #include "client.h"
21
22 struct Client;
23 struct SLink;
24 struct TRecord;
25
26
27 /*
28  * General defines
29  */
30
31 /*-----------------------------------------------------------------------------
32  * Macros
33  */
34
35 #define CONF_ILLEGAL            0x80000000
36 #define CONF_MATCH              0x40000000
37 #define CONF_CLIENT             0x0002
38 #define CONF_SERVER             0x0004
39 #define CONF_LOCOP              0x0010
40 #define CONF_OPERATOR           0x0020
41 #define CONF_LEAF               0x1000
42 #define CONF_HUB                0x4000
43 #define CONF_UWORLD             0x8000
44
45 #define CONF_OPS                (CONF_OPERATOR | CONF_LOCOP)
46 #define CONF_CLIENT_MASK        (CONF_CLIENT | CONF_OPS | CONF_SERVER)
47
48 #define IsIllegal(x)    ((x)->status & CONF_ILLEGAL)
49
50 /*
51  * Structures
52  */
53
54 struct ConfItem
55 {
56   struct ConfItem *next;
57   unsigned int status;      /* If CONF_ILLEGAL, delete when no clients */
58   unsigned int clients;     /* Number of *LOCAL* clients using this */
59   struct ConnectionClass *conn_class;  /* Class of connection */
60   struct in_addr ipnum;       /* ip number of host field */
61   char *host;
62   char *passwd;
63   char *name;
64   time_t hold; /* Hold until this time (calendar time) */
65   int dns_pending; /* a dns request is pending */
66   unsigned short port;
67   unsigned char bits; /* Number of bits for ipkills. */
68   struct Privs privs; /* Priviledges for opers. */
69 };
70
71 struct ServerConf {
72   struct ServerConf* next;
73   char*              hostname;
74   char*              passwd;
75   char*              alias;
76   struct in_addr     address;
77   int                port;
78   int                dns_pending;
79   int                connected;
80   time_t             hold;
81   struct ConnectionClass*  conn_class;
82 };
83
84 struct DenyConf {
85   struct DenyConf*    next;
86   char*               hostmask;
87   char*               message;
88   char*               usermask;
89   unsigned int        address;
90   unsigned int        flags;
91   char                bits;        /* Number of bits for ipkills */
92 };
93
94 #define DENY_FLAGS_FILE     0x0001 /* Comment is a filename */
95 #define DENY_FLAGS_IP       0x0002 /* K-line by IP address */
96 #define DENY_FLAGS_REALNAME 0x0004 /* K-line by real name */
97
98 /*
99  * A line: A:<line 1>:<line 2>:<line 3>
100  */
101 struct LocalConf {
102   char*          name;
103   char*          description;
104   struct in_addr vhost_address;
105   unsigned int   numeric;
106   char*          location1;
107   char*          location2;
108   char*          contact;
109 };
110
111 struct MotdItem {
112   char line[82];
113   struct MotdItem *next;
114 };
115
116 struct MotdConf {
117   struct MotdConf* next;
118   char* hostmask;
119   char* path;
120 };
121
122 enum {
123   CRULE_AUTO = 1,
124   CRULE_ALL  = 2,
125   CRULE_MASK = 3
126 };
127
128 struct CRuleNode;
129
130 struct CRuleConf {
131   struct CRuleConf* next;
132   char*             hostmask;
133   char*             rule;
134   int               type;
135   struct CRuleNode* node;
136 };
137
138 struct TRecord {
139   struct TRecord *next;
140   char *hostmask;
141   struct MotdItem *tmotd;
142   struct tm tmotd_tm;
143 };
144
145 enum AuthorizationCheckResult {
146   ACR_OK,
147   ACR_NO_AUTHORIZATION,
148   ACR_TOO_MANY_IN_CLASS,
149   ACR_TOO_MANY_FROM_IP,
150   ACR_ALREADY_AUTHORIZED,
151   ACR_BAD_SOCKET
152 };
153
154
155 /*
156  * GLOBALS
157  */
158 extern struct ConfItem* GlobalConfList;
159 extern int              GlobalConfCount;
160 extern struct tm        motd_tm;
161 extern struct MotdItem* motd;
162 extern struct MotdItem* rmotd;
163 extern struct TRecord*  tdata;
164
165 /*
166  * Proto types
167  */
168
169 extern int init_conf(void);
170
171 extern const struct LocalConf* conf_get_local(void);
172 extern const struct MotdConf*  conf_get_motd_list(void);
173 extern const struct CRuleConf* conf_get_crule_list(void);
174 extern const struct DenyConf*  conf_get_deny_list(void);
175
176 extern const char* conf_eval_crule(const char* name, int mask);
177
178 extern struct ConfItem* attach_confs_byhost(struct Client* cptr, const char* host, int statmask);
179 extern struct ConfItem* find_conf_byhost(struct SLink* lp, const char* host, int statmask);
180 extern struct ConfItem* find_conf_byname(struct SLink* lp, const char *name, int statmask);
181 extern struct ConfItem* conf_find_server(const char* name);
182
183 extern void det_confs_butmask(struct Client *cptr, int mask);
184 extern enum AuthorizationCheckResult attach_conf(struct Client *cptr, struct ConfItem *aconf);
185 extern struct ConfItem* find_conf_exact(const char* name, const char* user,
186                                         const char* host, int statmask);
187 extern enum AuthorizationCheckResult conf_check_client(struct Client *cptr);
188 extern int  conf_check_server(struct Client *cptr);
189 extern struct ConfItem* find_conf_name(const char* name, int statmask);
190 extern int rehash(struct Client *cptr, int sig);
191 extern void read_tlines(void);
192 extern int find_kill(struct Client *cptr);
193 extern int find_restrict(struct Client *cptr);
194 extern struct MotdItem* read_motd(const char* motdfile);
195
196 extern void set_initial_oper_privs(struct ConfItem *oper, int flags);
197 extern void lookup_confhost(struct ConfItem *aconf);
198
199 extern void yyerror(const char *msg);
200
201 #endif /* INCLUDED_s_conf_h */