chiark / gitweb /
Commit 2.4.5-5 as unpacked
[innduct.git] / nnrpd / nnrpd.h
1 /*  $Id: nnrpd.h 7343 2005-06-20 03:23:34Z eagle $
2 **
3 **  Net News Reading Protocol server.
4 */
5
6 #include "config.h"
7 #include "portable/socket.h"
8 #include "portable/time.h"
9
10 #include <ctype.h>
11 #include <errno.h>
12 #include <fcntl.h>
13 #include <syslog.h>
14 #include <sys/stat.h>
15
16 #include "inn/qio.h"
17 #include "libinn.h"
18 #include "nntp.h"
19 #include "paths.h"
20 #include "storage.h"
21 #include "inn/vector.h"
22 #include "inn/timer.h"
23
24 /*
25 **  Maximum input line length, sigh.
26 */
27 #define ART_LINE_LENGTH         1000
28 #define ART_LINE_MALLOC         1024
29 #define ART_MAX                 1024
30
31
32 /*
33 **  Some convenient shorthands.
34 */
35 typedef struct in_addr  INADDR;
36
37
38 /*
39 **  A range of article numbers.
40 */
41 typedef struct _ARTRANGE {
42     int         Low;
43     int         High;
44 } ARTRANGE;
45
46 /*
47 ** access configuration for each readers
48  */
49 typedef struct _ACCESSGROUP {
50     char *name;
51     char *key;
52     char *read;
53     char *post;
54     char *users;
55     char *rejectwith;
56     int allownewnews;
57     bool allowihave;
58     int locpost;
59     int allowapproved;
60     int used;
61     int localtime;
62     int strippath;
63     int nnrpdperlfilter;
64     int nnrpdpythonfilter;
65     char *fromhost;
66     char *pathhost;
67     char *organization;
68     char *moderatormailer;
69     char *domain;
70     char *complaints;
71     int spoolfirst;
72     int checkincludedtext;
73     int clienttimeout;
74     long localmaxartsize;
75     int readertrack;
76     int strippostcc;
77     int addnntppostinghost;
78     int addnntppostingdate;
79     char *nnrpdposthost;
80     int nnrpdpostport;
81     int nnrpdoverstats;
82     int backoff_auth;
83     char *backoff_db;
84     long backoff_k;
85     long backoff_postfast;
86     long backoff_postslow;
87     long backoff_trigger;
88     int nnrpdcheckart;
89     int nnrpdauthsender;
90     int virtualhost;
91     char *newsmaster;
92     long maxbytespersecond;
93 } ACCESSGROUP;
94
95 /*
96 **  What line_read returns.
97 */
98 typedef enum _READTYPE {
99     RTeof,
100     RTok,
101     RTlong,
102     RTtimeout
103 } READTYPE;
104
105
106 /*
107 ** Structure used by line_read to keep track of what's been read
108 */
109 struct line {
110     char *start;
111     char *where;
112     size_t remaining;
113     size_t allocated;
114 };
115
116 /*
117 **  Information about the schema of the news overview files.
118 */
119 typedef struct _ARTOVERFIELD {
120     char        *Header;
121     int         Length;
122     bool        NeedsHeader;
123 } ARTOVERFIELD;
124
125 /*
126 **  Supported timers.  If you add new timers to this list, also add them to
127 **  the list of tags in nnrpd.c.
128 */
129 enum timer {
130     TMR_IDLE = TMR_APPLICATION, /* Server is completely idle. */
131     TMR_NEWNEWS,                /* Executing NEWNEWS command */
132     TMR_READART,                /* Reading an article (SMretrieve) */
133     TMR_CHECKART,               /* Checking an article (ARTinstorebytoken) */
134     TMR_NNTPREAD,               /* Reading from the peer */
135     TMR_NNTPWRITE,              /* Writing to the peer */
136     TMR_MAX
137 };
138
139 #if     defined(MAINLINE)
140 #define EXTERN  /* NULL */
141 #else
142 #define EXTERN  extern
143 #endif  /* defined(MAINLINE) */
144
145 EXTERN bool     PERMauthorized;
146 EXTERN bool     PERMcanpost;
147 EXTERN bool     PERMcanread;
148 EXTERN bool     PERMneedauth;
149 EXTERN bool     PERMspecified;
150 EXTERN ACCESSGROUP      *PERMaccessconf;
151 EXTERN bool     Tracing;
152 EXTERN bool     Offlinepost;
153 EXTERN bool     initialSSL;
154 EXTERN char     **PERMreadlist;
155 EXTERN char     **PERMpostlist;
156 EXTERN char     ClientHost[SMBUF];
157 EXTERN char     ServerHost[SMBUF];
158 EXTERN char     Username[SMBUF];
159 #ifdef HAVE_INET6
160 EXTERN char     ClientIpString[INET6_ADDRSTRLEN];
161 EXTERN char     ServerIpString[INET6_ADDRSTRLEN];
162 #else
163 EXTERN char     ClientIpString[20];
164 EXTERN char     ServerIpString[20];
165 #endif
166 EXTERN int      ClientPort;
167 EXTERN int      ServerPort;
168 EXTERN char     LogName[256] ;
169 #ifdef HAVE_SSL
170 EXTERN bool     ClientSSL;
171 #endif
172 extern char     *ACTIVETIMES;
173 extern char     *HISTORY;
174 extern char     *ACTIVE;
175 extern char     *NEWSGROUPS;
176 extern char     *NNRPACCESS;
177 extern char     NOACCESS[];
178 EXTERN int      SPOOLlen;
179 EXTERN char     PERMpass[SMBUF];
180 EXTERN char     PERMuser[SMBUF];
181 EXTERN FILE     *locallog;
182 EXTERN int      ARTnumber;      /* Current article number */
183 EXTERN int      ARThigh;        /* Current high number for group */
184 EXTERN int      ARTlow;         /* Current low number for group */
185 EXTERN long     ARTcount;       /* Current number of articles in group */
186 EXTERN long     MaxBytesPerSecond; /* maximum bytes per sec a client can use, defaults to 0 */
187 EXTERN long     ARTget;
188 EXTERN long     ARTgettime;
189 EXTERN long     ARTgetsize;
190 EXTERN long     OVERcount;      /* number of XOVER commands */
191 EXTERN long     OVERhit;        /* number of XOVER records found in .overview */
192 EXTERN long     OVERmiss;       /* number of XOVER records found in articles */
193 EXTERN long     OVERtime;       /* number of ms spent sending XOVER data */
194 EXTERN long     OVERsize;       /* number of bytes of XOVER data sent   */
195 EXTERN long     OVERdbz;        /* number of ms spent reading dbz data  */
196 EXTERN long     OVERseek;       /* number of ms spent seeking history   */
197 EXTERN long     OVERget;        /* number of ms spent reading history   */
198 EXTERN long     OVERartcheck;   /* number of ms spent article check     */
199 EXTERN double   IDLEtime;
200 EXTERN long     GRParticles;
201 EXTERN long     GRPcount;
202 EXTERN char     *GRPcur;
203 EXTERN long     POSTreceived;
204 EXTERN long     POSTrejected;
205
206 EXTERN bool     BACKOFFenabled;
207 EXTERN long     ClientIpAddr;
208 EXTERN char     *VirtualPath;
209 EXTERN int      VirtualPathlen;
210 EXTERN struct history *History;
211 EXTERN struct line NNTPline;
212 EXTERN struct vector *OVextra;
213 EXTERN int      overhdr_xref;
214 EXTERN bool     LLOGenable;
215
216 extern const char       *ARTpost(char *article, char *idbuff, bool ihave,
217                                  bool *permanent);
218 extern void             ARTclose(void);
219 extern int              TrimSpaces(char *line);
220 extern char             *Glom(char **av);
221 extern int              Argify(char *line, char ***argvp);
222 extern void             InitBackoffConstants(void);
223 extern char             *PostRecFilename(char *ip, char *user);
224 extern int              LockPostRec(char *path);
225 extern int              LockPostRec(char *path);
226 extern void             UnlockPostRec(char *path);
227 extern int              RateLimit(long *sleeptime, char *path);
228 extern void             ExitWithStats(int x, bool readconf);
229 extern char             *GetHeader(const char *header);
230 extern void             GRPreport(void);
231 extern bool             NGgetlist(char ***argvp, char *list);
232 extern bool             PERMartok(void);
233 extern void             PERMgetaccess(char *nnrpaccess);
234 extern void             PERMgetpermissions(void);
235 extern void             PERMlogin(char *uname, char *pass, char *errorstr);
236 extern bool             PERMmatch(char **Pats, char **list);
237 extern bool             ParseDistlist(char ***argvp, char *list);
238 extern void             SetDefaultAccess(ACCESSGROUP*);
239 extern void             Reply(const char *fmt, ...);
240 extern void             Printf(const char *fmt, ...);
241
242 extern void             CMDauthinfo  (int ac, char** av);
243 extern void             CMDdate      (int ac, char** av);
244 extern void             CMDfetch     (int ac, char** av);
245 extern void             CMDgroup     (int ac, char** av);
246 extern void             CMDhelp      (int ac, char** av);
247 extern void             CMDlist      (int ac, char** av);
248 extern void             CMDmode      (int ac, char** av);
249 extern void             CMDnewgroups (int ac, char** av);
250 extern void             CMDnewnews   (int ac, char** av);
251 extern void             CMDnextlast  (int ac, char** av);
252 extern void             CMDpost      (int ac, char** av);
253 extern void             CMDxgtitle   (int ac, char** av);
254 extern void             CMDxover     (int ac, char** av);
255 extern void             CMDpat       (int ac, char** av);
256 extern void             CMDxpath     (int ac, char** av);
257 extern void             CMD_unimp    (int ac, char** av);
258 #ifdef HAVE_SSL
259 extern void             CMDstarttls  (int ac, char** av);
260 #endif
261
262
263
264 extern char *HandleHeaders(char *article);
265 extern bool ARTinstorebytoken(TOKEN token);
266
267 extern int TrackClient(char *client, char* user);
268
269 #ifdef  DO_PERL
270 extern void loadPerl(void);
271 extern void perlAccess(char *user, struct vector *access_vec);
272 extern int perlAuthenticate(char *user, char *passwd, char *errorstring, char*newUser);
273 extern void perlAuthInit(void);
274 #endif /* DO_PERL */
275
276 #ifdef  DO_PYTHON
277 extern bool PY_use_dynamic;
278
279 int PY_authenticate(char *path, char *Username, char *Password, char *errorstring, char *newUser);
280 void PY_access(char* path, struct vector *access_vec, char *Username);
281 int PY_dynamic(char *Username, char *NewsGroup, int PostFlag, char **reply_message);
282 void PY_dynamic_init (char* file);
283 #endif  /* DO_PYTHON */
284
285 void line_free(struct line *);
286 void line_init(struct line *);
287 READTYPE line_read(struct line *, int, const char **, size_t *);