/* * This OS/2 port was hacked by Harald Kipp from the * * Network News Transfer Protocol server * * Phil Lapsley * University of California, Berkeley * Stan Barber * Baylor College of Medicine * * Bug reports related to THIS modified version should be sent to * * harald@os2point.ping.de * harald@sesam.com * Fido: 2:2448/434 * * You may freely copy or redistribute this software. However, * this may not apply to any part of changi, if otherwise noted. */ #include #include "dbm.h" /*----------------------------------------------------------------------*/ void _cdecl ClientThread(int *ps); int parsit(char *line, char ***array); int get_distlist(char ***array, char *list); int ngmatch(int (*func)(char *, char *), int dflt, char **ngspec, int ngspeccount, char **matchlist, int matchcount); int s1strneql(char *s1, char *s2); int get_nglist(char ***array, char *list); int check_ngperm(FILE *fp, char **ngpermlist, int ngpermcount); void spew(int s, FILE *fp, int how); int findart(char *artname, long art_array[], int num_arts); int restreql(char *w, char *s); int space(int min_free); /*----------------------------------------------------------------------*/ /* Structure with info about connect clients. */ /* */ /*----------------------------------------------------------------------*/ typedef struct _NEWSCLIENT { int s; /* socket of client connection */ int ingroup; /* set if client has selected a newsgroup */ int canpost; /* set if client got permission to post */ int canread; /* set if client got permission to read */ int canxfer; /* set if client got permission to transfer */ char group_name[256]; /* selected newsgroup */ int num_arts; /* number of articles in art_array */ long art_array[MAX_ARTICLES]; /* contains article numbers of group */ int art_ptr; /* selected article, index of art_array */ FILE *art_fp; /* article file pointer */ long art_num; /* number of selected article */ char art_id[MAXBUFLEN]; /* id of selected article */ DBM *db; /* history database pointer */ char remotehost[MAX_HOSTNAMELEN]; /* name of connected client */ char **nglist; int ngpermcount; /* number of permissions in list */ char **ngpermlist; /* permission list */ int distcount; /* number of distributions in list */ char **dist_list; /* distribution list */ char mydir[256]; /* current news directory */ } NEWSCLIENT, *PNEWSCLIENT; /*----------------------------------------------------------------------*/ /* Functions performing main nntp commands */ /* */ /*----------------------------------------------------------------------*/ extern void ahbs(PNEWSCLIENT, int, char **); extern void dodate(PNEWSCLIENT, int, char **); extern void group(PNEWSCLIENT, int, char **); extern void help(PNEWSCLIENT, int, char **); extern void ihave(PNEWSCLIENT, int, char **); extern void ignore(PNEWSCLIENT, int, char **); extern void list(PNEWSCLIENT, int, char **); extern void newgroups(PNEWSCLIENT, int, char **); extern void newnews(PNEWSCLIENT, int, char **); extern void nextlast(PNEWSCLIENT, int, char **); extern void post(PNEWSCLIENT, int, char **); extern void slave(PNEWSCLIENT, int, char **); extern void listgroup(PNEWSCLIENT, int, char **); extern void xhdr(PNEWSCLIENT, int, char **); extern void doxover(PNEWSCLIENT, int, char **); extern void xthread(PNEWSCLIENT, int, char **); extern void xindex(PNEWSCLIENT, int, char **); extern char *gethistent(PNEWSCLIENT pnc, char *msg_id, char *path); extern FILE *openartbyid(char *msg_id); int spawn(int s, char *cmnd, int cont_code, int err_code); FILE *open_valid_art(PNEWSCLIENT pnc, char *artname, char *id); extern int initexit(void); void host_access(PNEWSCLIENT pnc);