1 /* $Id: nnrpd.h 7343 2005-06-20 03:23:34Z eagle $
3 ** Net News Reading Protocol server.
7 #include "portable/socket.h"
8 #include "portable/time.h"
21 #include "inn/vector.h"
22 #include "inn/timer.h"
25 ** Maximum input line length, sigh.
27 #define ART_LINE_LENGTH 1000
28 #define ART_LINE_MALLOC 1024
33 ** Some convenient shorthands.
35 typedef struct in_addr INADDR;
39 ** A range of article numbers.
41 typedef struct _ARTRANGE {
47 ** access configuration for each readers
49 typedef struct _ACCESSGROUP {
64 int nnrpdpythonfilter;
68 char *moderatormailer;
72 int checkincludedtext;
77 int addnntppostinghost;
78 int addnntppostingdate;
85 long backoff_postfast;
86 long backoff_postslow;
92 long maxbytespersecond;
96 ** What line_read returns.
98 typedef enum _READTYPE {
107 ** Structure used by line_read to keep track of what's been read
117 ** Information about the schema of the news overview files.
119 typedef struct _ARTOVERFIELD {
126 ** Supported timers. If you add new timers to this list, also add them to
127 ** the list of tags in nnrpd.c.
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 */
139 #if defined(MAINLINE)
140 #define EXTERN /* NULL */
142 #define EXTERN extern
143 #endif /* defined(MAINLINE) */
145 EXTERN bool PERMauthorized;
146 EXTERN bool PERMcanpost;
147 EXTERN bool PERMcanread;
148 EXTERN bool PERMneedauth;
149 EXTERN bool PERMspecified;
150 EXTERN ACCESSGROUP *PERMaccessconf;
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];
160 EXTERN char ClientIpString[INET6_ADDRSTRLEN];
161 EXTERN char ServerIpString[INET6_ADDRSTRLEN];
163 EXTERN char ClientIpString[20];
164 EXTERN char ServerIpString[20];
166 EXTERN int ClientPort;
167 EXTERN int ServerPort;
168 EXTERN char LogName[256] ;
170 EXTERN bool ClientSSL;
172 extern char *ACTIVETIMES;
173 extern char *HISTORY;
175 extern char *NEWSGROUPS;
176 extern char *NNRPACCESS;
177 extern char NOACCESS[];
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 */
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;
203 EXTERN long POSTreceived;
204 EXTERN long POSTrejected;
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;
216 extern const char *ARTpost(char *article, char *idbuff, bool ihave,
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, ...);
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);
259 extern void CMDstarttls (int ac, char** av);
264 extern char *HandleHeaders(char *article);
265 extern bool ARTinstorebytoken(TOKEN token);
267 extern int TrackClient(char *client, char* user);
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);
277 extern bool PY_use_dynamic;
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 */
285 void line_free(struct line *);
286 void line_init(struct line *);
287 READTYPE line_read(struct line *, int, const char **, size_t *);