home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-02-04 | 53.9 KB | 2,256 lines |
- Newsgroups: comp.sources.misc
- From: Volker.Schuermann@unnet.w.open.de (Volker Schuermann)
- Subject: v35i041: mbox - ix/Mbox, A BBS for UNIX and MINIX v1.6 PL10j7, Part06/15
- Message-ID: <1993Feb5.185705.10231@sparky.imd.sterling.com>
- X-Md4-Signature: c999e202c8a8eb41a784f2c2eba1fbf7
- Date: Fri, 5 Feb 1993 18:57:05 GMT
- Approved: kent@sparky.imd.sterling.com
-
- Submitted-by: Volker.Schuermann@unnet.w.open.de (Volker Schuermann)
- Posting-number: Volume 35, Issue 41
- Archive-name: mbox/part06
- Environment: MINIX, ISC, ESIX, SVR3
- Supersedes: mbox: Volume 31, Issue 16-27
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then feed it
- # into a shell via "sh file" or similar. To overwrite existing files,
- # type "sh file -c".
- # Contents: src/mb-daemon.c src/misc.c src/uptodate.c
- # Wrapped by kent@sparky on Fri Feb 5 12:18:07 1993
- PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
- echo If this archive is complete, you will see the following message:
- echo ' "shar: End of archive 6 (of 15)."'
- if test -f 'src/mb-daemon.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/mb-daemon.c'\"
- else
- echo shar: Extracting \"'src/mb-daemon.c'\" \(24038 characters\)
- sed "s/^X//" >'src/mb-daemon.c' <<'END_OF_FILE'
- X/***************************************************************************/
- X/* PROGRAMM ix/Mbox */
- X/* DATEI mb-daemon.c */
- X/* FUNKTIONEN reflector(), scan(), mix(), main() */
- X/* AUTOR vs (Volker Schuermann/MINIX-Version) */
- X/* LETZTE AENDERUNG 16.09.1992 */
- X/***************************************************************************/
- X
- X#ifndef _ESTDIO
- X#include <stdio.h>
- X#else
- X#include <estdio.h>
- X#endif
- X#include <sys/types.h>
- X#include <sys/stat.h>
- X#include <time.h>
- X#include <dirent.h>
- X
- X#include "mbox.h"
- X
- X
- Xint FASTMODE;
- X
- X
- Xint mb_gruppen;
- Xint mb_new;
- Xlong mb_bytes;
- Xlong mb_new_bytes;
- Xlong mb_artikel;
- X
- X#ifdef ADDRMODE
- XFILE *ad;
- X#endif
- X
- X/***************************************************************************/
- X/* FUNKTION reflector() */
- X/* BESCHREIBUNG Sendet eine persoenliche Mail an den Autor eines Arti- */
- X/* kels in einer bestimmten NG. */
- X/* */
- X/* VORSICHT: Wilde Reflectoren werden vom Netz getrennt !!! */
- X/* PARAMETER arg = DUMMY (?) */
- X/* msg = Artikel */
- X/* RUECKGABE -1 = Artikel nicht gefunden */
- X/* 0 = Ok */
- X/***************************************************************************/
- X
- Xint FLAG;
- X
- Xint reflector(arg, msg)
- Xunsigned char arg[];
- Xunsigned char msg[];
- X{
- X FILE *fp;
- X FILE *ff;
- X
- X unsigned char s[255];
- X unsigned char tmp[STRING];
- X
- X unsigned char receiver[STRING];
- X
- X unsigned char path[255];
- X unsigned char reply_to[255];
- X unsigned char from[255];
- X unsigned char sender[255];
- X unsigned char subject[255];
- X unsigned char summary[255];
- X unsigned char keywords[255];
- X unsigned char newsgroups[255];
- X unsigned char followup_to[255];
- X unsigned char distribution[255];
- X unsigned char date[255];
- X unsigned char lines[255];
- X unsigned char message_id[255];
- X unsigned char organization[255];
- X unsigned char posted[255];
- X unsigned char article_id[255];
- X unsigned char nntp_post[255];
- X unsigned char references[255];
- X
- X int id_err = 0;
- X int i;
- X int inlines;
- X
- X int reply = 0;
- X int noreply = 0;
- X int dirlist = 0;
- X int logfile = 0;
- X int info = 0;
- X int minimal = 0;
- X long timer;
- X
- X int ok = 0;
- X
- X fp = fopen(msg, "r");
- X if (fp == NULL) return -1;
- X
- X sprintf(tmp, "%s/%d", TMP, getpid());
- X ff = fopen(tmp, "w");
- X
- X i = 1;
- X inlines = -1;
- X
- X while (fgets(s, 255, fp) != NULL) {
- X ok = 0;
- X if (strcomp("Path:", s) == 0) {
- X sprintf(path, "%02d>> %s <<\n", i, (unsigned char *) stripped(s));
- X ok++;
- X }
- X if (strcomp("Reply-To:", s) == 0) {
- X sprintf(reply_to, "%02d>> %s <<\n", i, (unsigned char *) stripped(s));
- X reply--;
- X ok++;
- X }
- X if (strcomp("From:", s) == 0) {
- X sprintf(from, "%02d>> %s <<\n", i, (unsigned char *) stripped(s));
- X ok++;
- X }
- X if (strcomp("Sender:", s) == 0) {
- X sprintf(sender, "%02d>> %s <<\n", i, (unsigned char *) stripped(s));
- X ok++;
- X }
- X if (strcomp("Subject:", s) == 0) {
- X sprintf(subject, "%02d>> %s <<\n", i, (unsigned char *) stripped(s));
- X ok++;
- X }
- X if (strcomp("Summary:", s) == 0) {
- X sprintf(summary, "%02d>> %s <<\n", i, (unsigned char *) stripped(s));
- X ok++;
- X }
- X if (strcomp("Keywords:", s) == 0) {
- X sprintf(keywords, "%02d>> %s <<\n", i, (unsigned char *) stripped(s));
- X ok++;
- X }
- X if (strcomp("Newsgroups:", s) == 0) {
- X sprintf(newsgroups, "%02d>> %s <<\n", i, (unsigned char *) stripped(s));
- X ok++;
- X }
- X if (strcomp("Followup-To:", s) == 0) {
- X sprintf(followup_to, "%02d>> %s <<\n", i, (unsigned char *) stripped(s));
- X ok++;
- X }
- X if (strcomp("Distribution:", s) == 0) {
- X sprintf(distribution, "%02d>> %s <<\n", i, (unsigned char *) stripped(s));
- X ok++;
- X }
- X if (strcomp("Date:", s) == 0) {
- X sprintf(date, "%02d>> %s <<\n", i, (unsigned char *) stripped(s));
- X ok++;
- X }
- X if (strcomp("Lines:", s) == 0) {
- X sprintf(lines, "%02d>> %s <<\n", i, (unsigned char *) stripped(s));
- X ok++;
- X }
- X if (strcomp("Message-I", s) == 0) {
- X sprintf(message_id, "%02d>> %s <<\n", i, (unsigned char *) stripped(s));
- X /*
- X if (s[9] == 'D') id_err++;
- X */
- X ok++;
- X }
- X if (strcomp("Organization:", s) == 0) {
- X sprintf(organization, "%02d>> %s <<\n", i, (unsigned char *) stripped(s));
- X ok++;
- X }
- X if (strcomp("Posted:", s) == 0) {
- X sprintf(posted, "%02d>> %s <<\n", i, (unsigned char *) stripped(s));
- X ok++;
- X }
- X if (strcomp("Article-I.D.:", s) == 0) {
- X sprintf(article_id, "%02d>> %s <<\n", i, (unsigned char *) stripped(s));
- X ok++;
- X }
- X if (strcomp("Nntp-Posting-Host:", s) == 0) {
- X sprintf(nntp_post, "%02d>> %s <<\n", i, (unsigned char *) stripped(s));
- X ok++;
- X }
- X if (strcomp("References:", s) == 0) {
- X sprintf(references, "%02d>> %s <<\n", i, (unsigned char *) stripped(s));
- X ok++;
- X }
- X
- X
- X
- X if (strcomp("NO REPLY", s) == 0 ||
- X strcomp("NOT REPLY", s) == 0 ||
- X strcomp("KEIN REPLY", s) == 0 ||
- X strcomp("NO REPLIES", s) == 0 ||
- X strcomp("KEINE REPLIES", s) == 0 ||
- X strcomp("NO REPLYS", s) == 0 ||
- X strcomp("KEINE REPLYS", s) == 0 ||
- X strcomp("KEINE ANTWORTEN", s) == 0 ||
- X strcomp("NICHT ANTWORTEN", s) == 0 ||
- X strcomp("NO REFLECT", s) == 0 ||
- X strcomp("NOT REFLECT", s) == 0 ||
- X strcomp("NO ANSWER", s) == 0 ||
- X strcomp("NOT ANSWER", s) == 0 ||
- X strcomp("IGNORE", s) == 0)
- X noreply++;
- X
- X if (strcomp("PLEASE REPLY", s) == 0 ||
- X strcomp("BITTE REPLY", s) == 0 ||
- X strcomp("PLEASE REFLECT", s) == 0 ||
- X strcomp("BITTE REFLECT", s) == 0 ||
- X strcomp("BITTE ANTWORT", s) == 0 ||
- X strcomp("REPLY", s) == 0 ||
- X strcomp("REFLECT", s) == 0 ||
- X strcomp("ANTWORT", s) == 0)
- X reply++;
- X
- X if (strcomp("DIRLIST", s) == 0) dirlist++;
- X
- X if (strcomp("LOGFILE", s) == 0) logfile++;
- X
- X if (strcomp("INFO", s) == 0 ||
- X strcomp("HELP", s) == 0)
- X info++;
- X
- X if (strcomp("SHORT", s) == 0) minimal++;
- X
- X if (ok == 0) {
- X /* Sprintf(s, "%02d Body >> %s <<\n\n", i, (unsigned char *) stripped(s)); */
- X inlines++;
- X }
- X i++;
- X }
- X fclose(fp);
- X
- X strcpy(s, (unsigned char *) strcopy(organization, 19, 80));
- X if ((FLAG == 1) && (strcomp(ORGANIZATION, s) != 0)) return -1;
- X
- X if (reply_to[0] != '\0') {
- X strcpy(receiver, (unsigned char *) strcopy(reply_to, 15, 80));
- X } else {
- X strcpy(receiver, (unsigned char *) strcopy(from, 11, 80));
- X }
- X
- X i = 0;
- X while ((receiver[i] != '\0') && (receiver[i] != '(')) i++;
- X receiver[(i - 1)] = '\0';
- X
- X
- X
- X time(&timer);
- X
- X fprintf(ff, "From: reflector@%s (Reflecting Device)\n", UUCPID2);
- X fprintf(ff, "Reply-To: postmaster@%s (Reflectors' Boss)\n", UUCPID2);
- X fprintf(ff, "Organization: %s\n", ORGANIZATION);
- X if(message_id[0] != '\0'){
- X fprintf(fp, "References: %s", message_id);
- X }
- X fprintf(ff, "To: %s\n", receiver);
- X fprintf(ff, "Subject: *Reflexion*\n");
- X fprintf(ff, "X-Mailer: %s %s %s\n", VERSION, PATCHLEVEL, AUTOR);
- X fprintf(ff, "Message-Id: <%x.reflector@%s>\n", timer, UUCPID2);
- X fputs("\n", ff);
- X
- X
- X
- X fp = fopen(REFLECT_LOG, "a");
- X if (fp == NULL) {
- X while (1) printf("%c", 7);
- X }
- X fprintf(fp, "%s - %s", (unsigned char *) mydate(1), from);
- X fprintf(fp, " - %s", message_id);
- X fprintf(fp, " - %s", subject);
- X if (dirlist != 0) {
- X fprintf(fp, " - DIRLIST-Request\n");
- X }
- X if (logfile != 0) {
- X fprintf(fp, " - LOGFILE-Request\n");
- X }
- X if (info != 0) {
- X fprintf(fp, " - INFO-Request\n");
- X }
- X fprintf(fp, " - Reflected to %s\n\n", receiver);
- X fclose(fp);
- X
- X
- X fprintf(ff, "%s\n\n", MVERSION);
- X
- X
- X if ((dirlist == 0) && (logfile == 0) && (info == 0) && (minimal == 0)) {
- X fprintf(ff, "That's what we received in NG \"%s\" ...\n\n", arg);
- X
- X fputs(path, ff);
- X fputs(from, ff);
- X fputs(reply_to, ff);
- X fputs(sender, ff);
- X fputs(newsgroups, ff);
- X fputs(subject, ff);
- X fputs(article_id, ff);
- X fputs(posted, ff);
- X fputs(nntp_post, ff);
- X fputs(summary, ff);
- X fputs(keywords, ff);
- X fputs(followup_to, ff);
- X fputs(distribution, ff);
- X fputs(references, ff);
- X fputs(message_id, ff);
- X fputs(organization, ff);
- X fputs(date, ff);
- X fputs(lines, ff);
- X
- X
- X fputs("\n\nDiagnostics ...\n\n", ff);
- X
- X ok = 0;
- X
- X if (id_err != 0) {
- X fprintf(ff, "- \"Message-ID\" may cause trouble ... use \"Message-Id\".\n\n");
- X ok++;
- X }
- X if (reply_to[0] == '\0') {
- X fprintf(ff, "- No \"Reply-To\"-Path ... not a problem.\n\n");
- X ok++;
- X }
- X i = atoi((unsigned char *) strcopy(lines, 12, 80));
- X inlines--;
- X if (inlines != i) {
- X fprintf(ff, "- Your Header reports %d lines ... we counted %d.\n\n", i, inlines);
- X ok++;
- X }
- X if ((reply != 0) || (noreply != 0)) {
- X fprintf(ff, "- Found %d Reply-Requests and %d No-Replies.\n\n", reply, noreply);
- X ok++;
- X }
- X
- X if (ok == 0) {
- X fprintf(ff, "- Everything seems to be correct!\n\n");
- X }
- X }
- X
- X
- X if (dirlist != 0) {
- X fp = fopen(DIRLIST, "r");
- X if (fp != NULL) {
- X fputs("DIRLIST:\n\n", ff);
- X while (fgets(s, 250, fp) != NULL) fputs(s, ff);
- X fclose(fp);
- X } else {
- X fputs("Sorry, no DIRLIST-Entry found ...\n\n", ff);
- X }
- X printf("\n\n");
- X }
- X if (logfile != 0) {
- X fp = fopen(REFLECT_LOG, "r");
- X if (fp != NULL) {
- X fputs("LOGFILE:\n\n", ff);
- X while (fgets(s, 250, fp) != NULL) fputs(s, ff);
- X fclose(fp);
- X } else {
- X fputs("Sorry, no LOGFILE-Entry found ...\n\n", ff);
- X }
- X printf("\n\n");
- X }
- X if (info != 0) {
- X fputs("INFO (weitere Schluesselwoerter):\n\n", ff);
- X fputs("LOGFILE - Wenn der Reflektor nicht reflektiert, kann man sich\n", ff);
- X fputs(" das LOGFILE senden lassen, um zu ueberpruefen ob der\n", ff);
- X fputs(" Artikel jemals erfasst worden ist.\n\n", ff);
- X
- X fputs("DIRLIST - Eine Liste des lokalen MINIX-Archivs. Da der Reflektor\n", ff);
- X fputs(" (noch) kein PD-Server ist, kann man diese Liste nur zu\n", ff);
- X fputs(" Testzwecken anfordern.\n\n", ff);
- X
- X fputs("SHORT - Quittiert nur den Empfang des Artikels.\n\n", ff);
- X }
- X if (minimal != 0) {
- X fprintf(ff, "Received your article %s", message_id);
- X }
- X fclose(ff);
- X
- X sprintf(s, "/bin/sh ./etc/rmail.sh %s %s", tmp, receiver);
- X system(s);
- X
- X unlink(tmp);
- X
- X return 0;
- X}
- X
- X
- X
- X/***************************************************************************/
- X/* FUNKTION pdsize() */
- X/* BESCHREIBUNG Groesse eine PD-Datei ermitteln */
- X/* PARAMETER arg - Name des NG-Eintrags */
- X/* RUECKGABE Groesse in kBytes */
- X/***************************************************************************/
- X
- Xint pdsize( arg )
- Xunsigned char arg[];
- X{
- X FILE *fp;
- X unsigned char s[STRING];
- X int ok = 0, i;
- X struct stat fstat;
- X
- X fp = fopen( arg, "r" );
- X if(fp == NULL){
- X return (int) 0;
- X }
- X while((ok == 0) && (fgets(s, 80, fp) != NULL)){
- X if(strcomp("BINFILE", s) == 0) ok++;
- X }
- X fgets(s, 80, fp);
- X fclose(fp);
- X
- X if(ok == 0) strcpy(s, (unsigned char *) arg);
- X
- X if(stat((unsigned char *) stripped(s), &fstat) != NULL){
- X return (int) 0;
- X }
- X i = (int) (fstat.st_size / 1024);
- X if(i < 1) i = 1;
- X return (int) i;
- X}
- X
- X
- X
- X
- X
- X
- X
- X/***************************************************************************/
- X/* FUNKTION scan() */
- X/* BESCHREIBUNG Filtert einen NEWS-Artikel, und erstellt einen Eintrag */
- X/* fuer das entsprechenden INDEX-Files der ix/Mbox. */
- X/* PARAMETER arg = NG */
- X/* RUECKGABE Datum des aktuellsten Artikels */
- X/***************************************************************************/
- X
- Xunsigned char *scan(arg)
- Xunsigned char arg[];
- X{
- X FILE *ff;
- X FILE *fp;
- X FILE *fl;
- X FILE *ft;
- X FILE *fg;
- X
- X unsigned char s[STRING];
- X unsigned char t[STRING];
- X unsigned char f[STRING];
- X unsigned char v[STRING];
- X unsigned char from[STRING];
- X unsigned char subj[STRING];
- X unsigned char date[STRING];
- X unsigned char line[STRING];
- X unsigned char orga[STRING];
- X unsigned char Ndir[STRING];
- X unsigned char Ldir[STRING];
- X unsigned char Tdir[STRING];
- X unsigned char ex[1024];
- X unsigned char et[355];
- X
- X int dirarray[MAX_PER_NG];
- X int idp = 0, iii = 0;
- X
- X DIR *dp;
- X struct dirent *actdir;
- X
- X
- X static unsigned char sdate[STRING];
- X
- X unsigned char today[STRING];
- X unsigned char thatday[STRING];
- X unsigned char arti[STRING];
- X
- X int i, j;
- X int ok = 0;
- X int a, b;
- X int BINFILE = 0;
- X int PDGROUP = 0;
- X int fsi = 0;
- X int seq = 0;
- X int OLDENTRY = 0;
- X int OLDn = 0;
- X int OLDo = 0;
- X int got_org = 0;
- X
- X struct stat fstat;
- X struct tm *tp;
- X
- X i = 0;
- X while (arg[i] != '\0') {
- X t[i] = arg[i];
- X if (t[i] == '.') t[i] = '/';
- X i++;
- X }
- X t[i] = '\0';
- X
- X sprintf(Ndir, "%s/%s", NEWS, t);
- X
- X if(length(arg) > 14){
- X#ifndef _LONGNAMES
- X strcpy(s, (unsigned char *) shortname(arg));
- X#else
- X strcpy(s, (unsigned char *) arg);
- X#endif
- X sprintf(Ldir, "%s/%s", LIB, s);
- X }
- X else{
- X sprintf(Ldir, "%s/%s", LIB, arg);
- X }
- X strcpy(Ldir, (unsigned char *) stripped(Ldir));
- X
- X sprintf(Tdir, "%s/TD.%d", TMP, getpid());
- X
- X if (FLAG == 0) printf("\n%s...\n", Ndir);
- X
- X sprintf(f, "%s/%dA", TMP, getpid());
- X
- X
- X dp = opendir( Ndir );
- X if(dp == NULL){
- X printf("::No such directory!\n\n");
- X return "";
- X }
- X while((actdir = readdir(dp)) != NULL){
- X dirarray[idp] = atoi(actdir->d_name);
- X if(dirarray[idp] != 0) idp++;
- X if(idp >= MAX_PER_NG){
- X nerror("mb-daemon.c", 506, "scan", "Verzeichnis zu gross > ", Ndir );
- X }
- X }
- X closedir(dp);
- X
- X for(i = 0; i < idp; i++){
- X for(j = 0; j< idp; j++){
- X if(dirarray[i] > dirarray[j]){
- X a = dirarray[j];
- X dirarray[j] = dirarray[i];
- X dirarray[i] = a;
- X }
- X }
- X }
- X
- X if(idp == 0){
- X if (FLAG == 0) printf("::Directory is empty!\n\n");
- X ft = fopen(Ldir, "w");
- X fputs(" ", ft);
- X fclose(ft);
- X return "";
- X }
- X
- X sprintf(sdate, "%s", ":-)");
- X
- X sprintf(today, "%s", (unsigned char *) mydate(1));
- X
- X
- X ft = fopen(Ldir, "r");
- X if(ft == NULL){
- X ft = fopen(Ldir, "w");
- X fputs("\n\n0\n", ft);
- X fclose(ft);
- X ft = fopen(Ldir, "r");
- X OLDo = -2;
- X }
- X fgets(s, 81, ft);
- X fgets(s, 81, ft);
- X fgets(s, 81, ft);
- X OLDENTRY = atoi(s);
- X
- X mblock(Ldir);
- X
- X ff = fopen(Tdir, "w");
- X
- X seq = 0;
- X
- X mb_gruppen++;
- X
- X
- X if(strcomp(PDNG, arg) == 0){
- X PDGROUP++;
- X fprintf(ff, "%s\n", GBL08_MSG);
- X }
- X else{
- X fprintf(ff, "%s\n", GBL05_MSG);
- X }
- X fputs("===============================================================================\n", ff);
- X
- X while (iii < idp) {
- X
- X if((dirarray[iii] < OLDENTRY) && (FASTMODE == 1)) goto YET_SCANNED;
- X
- X OLDn++;
- X
- X seq++;
- X BINFILE = 0;
- X fsi++;
- X
- X sprintf(arti, "%s/%d", Ndir, dirarray[iii]);
- X strcpy(t, (unsigned char *) arti); /* ??? */
- X
- X if (FLAG == 0) printf("%s: ", t);
- X
- X fp = fopen(t, "r");
- X if (fp != NULL) {
- X
- X stat(t, &fstat);
- X tp = localtime(&fstat.st_mtime);
- X
- X if(fstat.st_mode & S_IFDIR) goto OFF_HERE;
- X
- X mb_bytes += (long) fstat.st_size;
- X sprintf(thatday, "%02.2d.%02.2d.%02.2d", tp->tm_mday, tp->tm_mon + TZS, tp->tm_year);
- X if(strcomp(thatday, today) == 0) mb_new_bytes += (long) fstat.st_size;
- X
- X if (sdate[0] == ':') {
- X sprintf(sdate, "%4.4d%02.2d%02.2d",
- X 1900 + tp->tm_year, tp->tm_mon + TZS, tp->tm_mday);
- X sprintf(s, "%02.2d:%02.2d",
- X tp->tm_hour, tp->tm_min);
- X LASTTIME = timeconv(s);
- X if (FLAG == 0) printf(" (%s) ", sdate);
- X if(strcomp(thatday, today) == 0) mb_new++;
- X }
- X if ((strcomp(arg, REFLECT_NG) == 0) || (strcomp(arg, "local.test") == 0)) {
- X if (strcomp(thatday, today) == 0) {
- X reflector(arg, t);
- X }
- X }
- X from[0] = '\0';
- X subj[0] = '\0';
- X date[0] = '\0';
- X line[0] = '\0';
- X orga[0] = '\0';
- X
- X got_org = 0;
- X i = 0;
- X
- X while((got_org == 0) && (i < 20)){
- X fgets(ex, 1024, fp);
- X#ifdef ADDRMODE
- X if (strcomp("de.", arg) == 0) {
- X if (strcomp("Path:", ex) == 0) {
- X fprintf(ad, "%s\n", (unsigned char *) stripped(ex));
- X }
- X }
- X#endif
- X ex[80] = '\0'; strcpy(s, ex);
- X if (strcomp("From:", s) == 0) {
- X strcpy(from, s);
- X }
- X if (strcomp("Reply-To:", s) == 0) {
- X strcpy(from, s);
- X }
- X if (strcomp("Subject:", s) == 0) strcpy(subj, s);
- X if (strcomp("Date:", s) == 0) strcpy(date, s);
- X if (strcomp("Lines:", s) == 0) strcpy(line, s);
- X if (strcomp("BINFILE", s) == 0) BINFILE++;
- X if (strcomp("Organization:", s) == 0) strcpy(orga, s);
- X if (strlen(s) < 3) got_org++;
- X i++;
- X }
- X
- X#ifdef ADDRMODE
- X if (strcomp("de.", arg) == 0) {
- X fprintf(ad, "%s\n", (unsigned char *) stripped(from));
- X fprintf(ad, "%s\n", (unsigned char *) stripped(orga));
- X }
- X#endif
- X
- X if (FLAG == 0) printf("%s", subj);
- X
- X if ((from[0] == 'F') || (from[0] == 'R')) {
- X
- X sprintf(s, "%d ", dirarray[iii]);
- X s[6] = '\0';
- X if (BINFILE != 0) s[5] = '*';
- X
- X subj[79] = '\0';
- X strcpy(ex, (unsigned char *) strcopy(subj, 8, 79));
- X strcpy(et, (unsigned char *) stripped(ex));
- X strcpy(ex, et);
- X strcat(ex, " ");
- X ex[25] = '\0';
- X strcat(s, ex);
- X strcat(s, " ");
- X
- X
- X i = 5; /* 8 */
- X if (from[0] == 'R') i = 10;
- X
- X from[79] = '\0';
- X strcpy(ex, (unsigned char *) strcopy(from, i, 80));
- X strcpy(et, (unsigned char *) stripped(ex));
- X strcpy(ex, et);
- X
- X a = 0;
- X b = 0;
- X i = 0;
- X while (ex[i] != '\0') {
- X if (ex[i] == '(') a = i + 1;
- X if (ex[i] == ')') b = i - 1;
- X i++;
- X }
- X if (a < b) {
- X strcpy(et, (unsigned char *) strcopy(ex, a, b));
- X strcpy(ex, et);
- X }
- X strcat(ex, " ");
- X ex[19] = '\0';
- X strcat(s, ex);
- X strcat(s, " ");
- X
- X
- X i = 0;
- X j = 0;
- X while (date[i] != '\0') {
- X if (j == 0) {
- X if ((date[i] >= '1') && (date[i] <= '9'))
- X j = i;
- X }
- X i++;
- X }
- X
- X sprintf(ex, "%02.2d.%02.2d.%02.2d %02.2d:%02.2d",
- X tp->tm_mday, tp->tm_mon + TZS, tp->tm_year,
- X tp->tm_hour, tp->tm_min);
- X strcat(ex, " ");
- X ex[15] = '\0';
- X strcat(s, ex);
- X strcat(s, " ");
- X
- X strcpy(ex, (unsigned char *) strcopy(line, 7, 20));
- X strcpy(t, (unsigned char *) stripped(ex));
- X i = atoi(t);
- X sprintf(ex, "%-6.d", i);
- X
- X if(PDGROUP != 0){
- X i = pdsize(arti);
- X sprintf(ex, "%-6.d", i);
- X if(i == 0){
- X fg = fopen( CPRN, "a" );
- X if(fg != NULL){
- X fprintf(fg, "\nMB-DAEMON -> %23.23s | %s\n", s, arti);
- X fclose(fg);
- X }
- X }
- X }
- X
- X strcat(s, ex);
- X fputs(s, ff);
- X fputs("\n", ff);
- X
- X mb_artikel++;
- X
- X ok = 1;
- X } else {
- X if (FLAG == 0) printf("invalid header!\n");
- X }
- X
- X OFF_HERE:
- X
- X if (fp != 0) fclose(fp);
- X } else {
- X if (FLAG == 0) printf("can't open!\n");
- X }
- X iii++;
- X }
- X
- X YET_SCANNED:
- X
- X if(OLDn != 0) OLDn -= 1;
- X
- X idp -= 2; /* ??? */
- X
- X while(iii < idp){
- X if((OLDn != 0) || (FASTMODE == 0)){
- X fgets(s, 81, ft);
- X fputs(s, ff);
- X }
- X if(FLAG == 0){
- X sprintf(t, "%s/%d", Ndir, dirarray[iii]);
- X stat(t, &fstat);
- X mb_bytes += (long) fstat.st_size;
- X }
- X mb_artikel++;
- X OLDo++;
- X iii++;
- X }
- X
- X if((OLDn != 0) || (FASTMODE == 0)){
- X fgets(s, 81, ft);
- X if((FASTMODE == 1) && (OLDo > 0)) fputs(s, ff);
- X fclose(ff);
- X fclose(ft);
- X if(rename( Tdir, Ldir ) != 0){
- X ff = fopen( Tdir, "r");
- X ft = fopen( Ldir, "w");
- X while(fgets(s, 81, ff) != NULL){
- X fputs(s, ft);
- X }
- X }
- X }
- X if (ff != 0) fclose(ff);
- X if (ft != 0) fclose(ft);
- X
- X unlink(f);
- X unlink(Tdir);
- X
- X
- X if (sdate[0] == ':') {
- X sprintf(sdate, "%s", "19700101");
- X LASTTIME = 0;
- X }
- X
- X#ifdef _SYS7
- X if ((seq > MAX_PER_NG) && (FLAG == 0) && (strcomp("local", arg) != 0)) {
- X sprintf(s, "%s -n %s -e %d", EXPIRE, arg, EXPIRED_DAYS);
- X printf("%s\n", s);
- X system(s);
- X sprintf(s, "%s %s EXP", MB_DAEMON, arg);
- X system(s);
- X }
- X#endif
- X
- X mbunlock(Ldir);
- X
- X if((FASTMODE == 1) && (FLAG == 0)){
- X OLDo += 2;
- X printf("\n==> %s %d. %s %d.\n\n", MBD01_MSG, OLDn, MBD02_MSG, OLDo);
- X }
- X
- X return (unsigned char *) sdate;
- X}
- X
- X
- X
- X/***************************************************************************/
- X/* FUNKTION mix() */
- X/* BESCHREIBUNG Aktualisiert einzelnen Eintraege im AGROUPS-File. */
- X/* PARAMETER s = NG */
- X/* t = Neuer AGROUPS-Eintrag */
- X/* RUECKGABE keine */
- X/***************************************************************************/
- X
- Xvoid mix( s, t )
- Xunsigned char s[], t[];
- X{
- X FILE *ff, *fp;
- X unsigned char tmp[STRING];
- X unsigned char f[STRING];
- X
- X sprintf(tmp, "%s/ff%d", TMP, getpid());
- X
- X
- X maybe_locked( AGROUPS, "r" );
- X fp = fopen( AGROUPS, "r" );
- X if(fp == NULL){
- X printf("%s ?", AGROUPS);
- X exit(-1);
- X }
- X
- X ff = fopen( tmp, "w" );
- X if(ff == NULL){
- X printf("%s ?", tmp);
- X exit(-1);
- X }
- X
- X while(fgets(f, 80, fp) != NULL){
- X if(strcomp(s, f) == 0){
- X fputs(t, ff);
- X }
- X else{
- X fputs(f, ff);
- X }
- X }
- X fclose(fp);
- X fclose(ff);
- X
- X sprintf(f, "mv %s %s", tmp, AGROUPS);
- X system( f );
- X}
- X
- X
- X
- X
- X
- X/***************************************************************************/
- X/* FUNKTION main() (mb_daemon) */
- X/* BESCHREIBUNG Scannt einen bzw. alle NEWS-Artikel, um die INDEX-Files */
- X/* der ix/Mbox zu aktualisieren. */
- X/* PARAMETER argc = Anzahl der Parameter */
- X/* argv = NG = nur diese NG scannen */
- X/* '' = alle NGs scannen */
- X/* RUECKGABE keine */
- X/***************************************************************************/
- X
- Xmain(argc, argv)
- Xint argc;
- Xunsigned char *argv[];
- X{
- X FILE *fp;
- X FILE *fa;
- X FILE *fc;
- X unsigned char s[STRING];
- X unsigned char t[STRING];
- X unsigned char d[STRING];
- X unsigned char TMP_AGROUPS[STRING];
- X
- X int a, b, i;
- X
- X chdir(HOME);
- X
- X setuid(0);
- X setgid(0);
- X umask(0000);
- X
- X FLAG = 0;
- X FASTMODE = 1;
- X
- X sprintf(TMP_AGROUPS, "%s/ACTIVE.%d", TMP, getpid() );
- X
- X if(argc > 1){
- X FLAG++;
- X }
- X if(argc > 2){ /* MB-Daemon ruft MB-Daemon !!! */
- X FLAG++;
- X FASTMODE = 0;
- X }
- X
- X if(strcomp("all", argv[1]) == 0) FLAG = 0;
- X
- X#if 0
- X if(argv[2][0] == '-'){ /* Index KOMPLETT neu bilden !!! */
- X FASTMODE = 0;
- X }
- X#endif
- X
- X if(FLAG == 0){
- X fa = fopen( TMP_AGROUPS, "w" );
- X if(fa == NULL){
- X printf("%s ???", TMP_AGROUPS);
- X exit( 0 );
- X }
- X }
- X
- X#ifdef ADDRMODE
- X ad = fopen( "/local/address/addresses", "a" );
- X if(ad == NULL){
- X printf("\n[local/address/addresses] ???\n");
- X exit( 0 );
- X }
- X#endif
- X
- X mb_gruppen = 0;
- X mb_new = 0;
- X mb_bytes = 0L;
- X mb_new_bytes = 0L;
- X mb_artikel = 0L;
- X
- X
- X if (fp = fopen(NGROUPS, "r"))
- X while (fscanf(fp, "%s %d %d %s", s, &a, &b, t) > 0) {
- X#ifdef _CNEWS
- X if(t[0] == '=')
- X continue;
- X#endif
- X if(FLAG > 0){
- X if(strcomp(argv[1], s) == 0){
- X d[0] = '\0';
- X#ifdef _SYS7
- X strcat(d, (unsigned char *) scan(s));
- X#else
- X strcat(d, (unsigned char *) scan(&s));
- X#endif
- X sprintf(t, "%s %s %ld\n", s, d, LASTTIME);
- X if(FLAG < 2) mix( s, t );
- X }
- X }
- X else{
- X d[0] = '\0';
- X#ifdef _SYS7
- X strcat(d, (unsigned char *) scan(s));
- X#else
- X strcat(d, (unsigned char *) scan(&s));
- X#endif
- X fprintf(fa, "%s %s %ld\n", s, d, LASTTIME);
- X }
- X }
- X if(fp != 0) fclose(fp);
- X
- X if(FLAG > 0){
- X }
- X else{
- X mb_bytes = (long)(mb_bytes / 1024);
- X mb_new_bytes = (long)(mb_new_bytes /1024);
- X
- X sprintf(d, "%s/%d.mbd", TMP, getpid());
- X fp = fopen( d, "w" );
- X fprintf(fp, "%s %s %6.d %6.ld",
- X mydate(1), mytime(1), mb_new, mb_new_bytes);
- X fprintf(fp, "%16.16s", " ");
- X fprintf(fp, "%6.d %6.ld %6.ld\n", mb_gruppen, mb_artikel, mb_bytes);
- X
- X b = PRO_ENTRIES / 2; a = 0;
- X
- X fc = fopen( MB_DLOG, "r" );
- X if(fc != 0){
- X while((fgets(s, STRING, fc) != 0) && (a < b)){
- X fputs(s, fp);
- X a++;
- X }
- X fclose(fc);
- X }
- X if(fp != 0) fclose(fp);
- X
- X sprintf(s, "mv %s %s > /dev/null", d, MB_DLOG);
- X system(s);
- X }
- X
- X if((FASTMODE == 1) && (FLAG == 0)){
- X printf("%s %d %s %ld %s.\n", MBD03_MSG, mb_new, MBD04_MSG,
- X mb_new_bytes, MBD05_MSG);
- X printf("%s %d %s %ld %s %ld %s.\n\n",
- X MBD06_MSG, mb_gruppen, MBD07_MSG, mb_artikel, MBD08_MSG,
- X mb_bytes, MBD09_MSG);
- X }
- X
- X
- X#ifdef ADDRMODE
- X if(ad != 0) fclose(ad);
- X#endif
- X
- X if(FLAG == 0){
- X fflush(fa);
- X fclose(fa);
- X fp = fopen( TMP_AGROUPS, "r" );
- X if(fp == NULL){
- X }
- X fa = fopen( AGROUPS, "w" );
- X if(fa == NULL){
- X }
- X while(fgets(s, 80, fp) != 0){
- X fputs(s, fa);
- X }
- X fflush(fa);
- X fclose(fa);
- X fclose(fp);
- X unlink( TMP_AGROUPS );
- X }
- X
- X return;
- X}
- X
- X
- END_OF_FILE
- if test 24038 -ne `wc -c <'src/mb-daemon.c'`; then
- echo shar: \"'src/mb-daemon.c'\" unpacked with wrong size!
- fi
- # end of 'src/mb-daemon.c'
- fi
- if test -f 'src/misc.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/misc.c'\"
- else
- echo shar: Extracting \"'src/misc.c'\" \(23300 characters\)
- sed "s/^X//" >'src/misc.c' <<'END_OF_FILE'
- X/***************************************************************************/
- X/* PROGRAMM ix/Mbox */
- X/* DATEI misc.c */
- X/* FUNKTIONEN scanner(), schreiben(), prf(), pruefe() */
- X/* AUTOR vs (Volker Schuermann/MINIX-Version) */
- X/* LETZTE AENDERUNG 26.09.1992 */
- X/***************************************************************************/
- X
- X#include <sys/types.h>
- X#include <sys/stat.h>
- X#include <unistd.h>
- X#include <fcntl.h>
- X#include <stdio.h>
- X#include <utmp.h>
- X#include <time.h>
- X
- X
- X#include "mbox.h"
- X
- X
- Xextern unsigned char headinfo[STRING];
- X
- X
- Xint lastpoint( name )
- Xunsigned char name[];
- X{
- X int a = 0, b = 0;
- X
- X while(name[a] != '\0'){
- X if(name[a] == '.') b = a;
- X a++;
- X }
- X if(b == 0) return a;
- X
- X return (int) b;
- X}
- X
- X
- X/***************************************************************************/
- X/* FUNKTION scanner() */
- X/* BESCHREIBUNG Wechselt BRETTER. Bei "B +" bzw. "B -" wird die Aktual- */
- X/* litaet nicht beruecksichtigt. In den anderen Modi */
- X/* werden nur aktuelle Bretter angesprungen. */
- X/* PARAMETER mode = '> 255' = nicht nur aktuelle Bretter */
- X/* '> 500' = zur nexten AREA */
- X/* '+' = aufwaerts springen */
- X/* '-' = abwaerts springen */
- X/* RUECKGABE keine */
- X/***************************************************************************/
- X
- Xvoid scanner(mode)
- Xint mode;
- X{
- X FILE *fp;
- X unsigned char s[STRING];
- X unsigned char t[STRING];
- X unsigned char f[STRING];
- X unsigned char prevg[STRING];
- X unsigned char prevf[STRING];
- X int ok = 0, a, b;
- X int line = 0, l = 0;
- X int locmod = 0;
- X int max = 0;
- X int widerange = 0;
- X
- X
- X if (mode >= 1000) {
- X widerange = 1000;
- X mode -= 1000;
- X }
- X
- X if (mode >= 500) {
- X locmod = 500;
- X mode -= 500;
- X }
- X
- X if (mode >= 255) {
- X locmod = 255;
- X mode -= 255;
- X }
- X KEIN_ZUGRIFF:
- X
- X if (locmod == 255) {
- X maybe_locked(NGROUPS, "r");
- X fp = fopen(NGROUPS, "r");
- X if (fp == NULL) {
- X nerror("misc.c", 26, "scanner", "Datei-Lesefehler", NGROUPS);
- X }
- X }
- X else {
- X maybe_locked(UGROUPS, "r");
- X fp = fopen(UGROUPS, "r");
- X if (fp == NULL) {
- X nerror("misc.c", 34, "scanner", "Datei-Lesefehler", UGROUPS);
- X }
- X }
- X
- X f[0] = '\0';
- X ok = 0;
- X strcpy(prevg, "L.I.S.A.");
- X
- X while ((ok == 0) && (fscanf(fp, "%s %d %d %s", s, &a, &a, t) > 0)) {
- X l++;
- X if (strcomp(NG, s) == 0) {
- X ok = 1;
- X }
- X else {
- X strcpy(f, (unsigned char *) s);
- X
- X if(strcomp(prevg, s) != 0){
- X if(widerange == 0){
- X a = lastpoint( s );
- X strcpy(prevg, (unsigned char *) s);
- X strcpy(prevf, (unsigned char *) s);
- X prevg[a] = '\0';
- X }
- X else{
- X strcpy(prevg, (unsigned char *) s); prevg[3] = '\0';
- X strcpy(prevf, (unsigned char *) s);
- X }
- X }
- X }
- X }
- X
- X if (locmod == 500) {
- X if (mode == '+') {
- X ok = 0;
- X
- X if(widerange == 0){
- X a = lastpoint( NG );
- X strcpy(prevg, (unsigned char *) NG);
- X prevg[a] = '\0';
- X }
- X else{
- X strcpy(prevg, (unsigned char *) NG);
- X prevg[3] = '\0';
- X }
- X
- X while ((ok == 0) && (fscanf(fp, "%s %d %d %s", s, &a, &a, t) > 0)) {
- X l++;
- X if (strcomp(prevg, s) != 0) {
- X ok = 1;
- X strcpy(f, (unsigned char *) s);
- X }
- X }
- X if(ok == 0) line = -1;
- X }
- X if (mode == '-') {
- X strcpy(f, (unsigned char *) prevf);
- X }
- X }
- X else{
- X if (mode == '+') {
- X if (fscanf(fp, "%s %d %d %s", f, &a, &a, t) < 1) {
- X if (ok == 0) {
- X rewind(fp);
- X fscanf(fp, "%s %d %d %s", f, &a, &a, t);
- X }
- X else {
- X line = -1;
- X }
- X }
- X }
- X if (mode == '-') {
- X if (f[0] == '\0') {
- X rewind(fp);
- X while (fscanf(fp, "%s %d %d %s", f, &a, &a, t) > 0);
- X }
- X }
- X }
- X fclose(fp);
- X
- X if (max > 20) line = -1;
- X
- X if ((line == -1) || (f[0] == '\0')) {
- X strcpy(BRETT, (unsigned char *) "PM");
- X printf("\n");
- X sprintf(NG, "%s.PM", USER.name);
- X sprintf(INHALT, "%s/usr/%d/INDEX", HOME, USER.id);
- X return;
- X }
- X if (l == 0) {
- X ansi("md");
- X printf(" %s\n", MIS01_MSG);
- X ansi("me");
- X return;
- X }
- X if (chk_newsgrp(f) != 0) {
- X sprintf(NG, "%s", f);
- X max++;
- X goto KEIN_ZUGRIFF;
- X }
- X brett(f);
- X}
- X
- X
- X
- X
- X
- X/***************************************************************************/
- X/* FUNKTION schreiben() */
- X/* BESCHREIBUNG Artikel fuer NEWS einlesen und verteilen. Die Distri- */
- X/* bution ist abhaengig von der NG und vom Userlevel. */
- X/* PARAMETER arg = DUMMY (!) */
- X/* RUECKGABE keine */
- X/***************************************************************************/
- X
- Xvoid schreiben(arg)
- Xunsigned char arg[];
- X{
- X FILE *fp;
- X FILE *ff;
- X FILE *fl;
- X unsigned char s[STRING];
- X unsigned char t[STRING];
- X unsigned char f[STRING];
- X unsigned char g[LSTRING];
- X unsigned char ex[255];
- X unsigned char cmdl[STRING];
- X unsigned char rep[STRING];
- X unsigned char subj[STRING];
- X unsigned char keyw[STRING];
- X unsigned char summ[STRING];
- X unsigned char from[STRING];
- X unsigned char msid[STRING];
- X unsigned char refs[STRING];
- X unsigned char tmp[STRING];
- X unsigned char ng[STRING];
- X unsigned char reply[STRING];
- X unsigned char group[STRING];
- X unsigned char newsgroups[STRING];
- X unsigned char distribution[STRING];
- X unsigned char followup[STRING];
- X unsigned char expires[STRING];
- X unsigned char ctrl[STRING];
- X unsigned char sender[STRING];
- X unsigned char approved[STRING];
- X unsigned char content[STRING];
- X unsigned char iam[STRING];
- X unsigned char username[STRING];
- X
- X int i, a, b, ok;
- X int app;
- X
- X unsigned char protokoll = 0;
- X unsigned char c;
- X unsigned char lf;
- X
- X int BINFILE;
- X
- X struct stat fst;
- X
- X unsigned char pubdir[STRING];
- X long tdummy;
- X long tn, ts;
- X
- X if (strcomp(BRETT, "PM") == 0) {
- X ansi("md");
- X printf(" <- \"%s.PM\" %s\n\n", USER.name, MIS02_MSG);
- X ansi("me");
- X return;
- X }
- X BINFILE = 0;
- X
- X
- X i = 0; /* Vorname.Name */
- X strcpy(ng, USER.name);
- X while (ng[i] != '\0') {
- X if (ng[i] == ' ') ng[i] = '.';
- X i++;
- X }
- X strcpy(username, ng);
- X
- X strcpy(group, NG);
- X
- X
- X umask(0000);
- X
- X if (arg[0] == '\0') {
- X
- X subj[0] = '\0';
- X keyw[0] = '\0';
- X from[0] = '\0';
- X msid[0] = '\0';
- X summ[0] = '\0';
- X refs[0] = '\0';
- X
- X sprintf(rep, "%s/%dRep", TMP, getpid());
- X
- X fp = fopen(rep, "r");
- X if (fp != NULL) { /* REPLY */
- X while ((fgets(s, 80, fp) != NULL) && (strlen(s) > 2)) {
- X if (strcomp("Subject:", s) == 0) {
- X strcat(subj, strcopy(s, 8, 79));
- X strcpy(subj, (unsigned char *) stripped(subj));
- X }
- X if (strcomp("From:", s) == 0) {
- X from[0] = '\0';
- X strcat(from, strcopy(s, 6, 79));
- X strcpy(from, (unsigned char *) stripped(from));
- X }
- X if (strcomp("Reply-To:", s) == 0) {
- X from[0] = '\0';
- X strcat(from, strcopy(s, 10, 79));
- X strcpy(from, (unsigned char *) stripped(from));
- X }
- X if (strcomp("Keywords:", s) == 0) {
- X strcat(keyw, strcopy(s, 10, 79));
- X strcpy(keyw, (unsigned char *) stripped(keyw));
- X }
- X if (strcomp("Summary:", s) == 0) {
- X strcat(summ, strcopy(s, 9, 79));
- X strcpy(summ, (unsigned char *) stripped(summ));
- X }
- X if (strcomp("Message-ID:", s) == 0) {
- X strcat(msid, strcopy(s, 11, 79));
- X strcpy(msid, (unsigned char *) stripped(msid));
- X }
- X if (strcomp("Content-Type:", s) == 0) {
- X strcat(content, strcopy(s, 14, 79));
- X strcpy(content, (unsigned char *) stripped(content));
- X }
- X if (strcomp("Article-I.D.:", s) == 0) {
- X strcat(msid, strcopy(s, 13, 79));
- X strcpy(msid, (unsigned char *) stripped(msid));
- X }
- X if (strcomp("References:", s) == 0) {
- X strcat(refs, strcopy(s, 12, 79));
- X strcpy(refs, (unsigned char *) stripped(refs));
- X }
- X if (strcomp("Followup-To:", s) == 0) {
- X strcpy(group, strcopy(s, 13, 79));
- X strcpy(group, (unsigned char *) stripped(group));
- X }
- X }
- X
- X if(strcomp("Poster", group) == 0){
- X printf(" <- %s\n", MIS02aMSG);
- X return;
- X }
- X
- X
- X sprintf(t, "%s/A%d", TMP, getpid());
- X ff = fopen(t, "w");
- X
- X a = 0;
- X b = 0;
- X i = 0;
- X while (from[i] != '\0') {
- X if (from[i] == '(') a = i + 1;
- X if (from[i] == ')') b = i - 1;
- X i++;
- X }
- X if (a < b) {
- X strcpy(s, (unsigned char *) strcopy(from, a, b));
- X strcpy(from, (unsigned char *) s);
- X }
- X sprintf(ex, "In article %s,\n %s writes:\n\n", msid, from);
- X fputs(ex, ff);
- X while (fgets(s, 80, fp) != NULL) {
- X if(s[0] != '\n') fputs("> ", ff);
- X fputs((unsigned char *) iso_line(s), ff);
- X }
- X fclose(fp);
- X fclose(ff);
- X
- X sprintf(cmdl, "%s %s", EDDY, t);
- X printf("\n\n");
- X system(cmdl);
- X if (strcomp("Re:", subj) != 0) {
- X sprintf(f, "Re: %s", stripped(subj));
- X strcpy(subj, (unsigned char *) f);
- X }
- X unlink(rep);
- X }
- X else { /* Interactive MAIL */
- X
- X printf("\n\n%c", CR);
- X ansi("mr");
- X printf("%s", MIS03_MSG);
- X ansi("me");
- X printf(" %s (%s)\n%c", USER.name, USER.nick, CR);
- X ansi("mr");
- X printf("%s", MIS04_MSG);
- X ansi("me");
- X printf(" %s\n%c", NG, CR);
- X ansi("mr");
- X printf("%s", MIS05_MSG);
- X ansi("me");
- X printf(" ");
- X strcpy(subj, (unsigned char *) getline(57, -11, '.', ""));
- X printf("\n");
- X ansi("mr");
- X printf("%s", MIS06_MSG);
- X ansi("me");
- X printf(" ");
- X strcpy(keyw, (unsigned char *) getline(57, -11, '.', ""));
- X printf("\n");
- X ansi("mr");
- X printf("%s", MIS07_MSG);
- X ansi("me");
- X printf(" ");
- X strcpy(summ, (unsigned char *) getline(57, -11, '.', ""));
- X
- X printf("\n\n");
- X ansi("mr");
- X printf("[%s] %s ? > ", NG, MIS08_MSG);
- X ansi("me");
- X printf("%c%c", MIS09_MSG, BS);
- X
- X do {
- X c = getint();
- X if (c >= 97) c -= 32;
- X if (c == '?') {
- X clearline();
- X ansi("mr");
- X printf("%c%s > ", CR, MIS12_MSG);
- X ansi("me");
- X }
- X if (c == ENTER) c = MIS09_MSG;
- X if ((c != MIS09_MSG) && (c != MIS10_MSG) && (c != MIS11_MSG)) c = 0;
- X } while (c == 0);
- X
- X printf("%c", c);
- X
- X if (c == MIS11_MSG) {
- X printf("\n");
- X unlink(t);
- X return;
- X }
- X if (c == MIS10_MSG) {
- X printf("%c ", CR);
- X ansi("mr");
- X printf("%c%s, ? > ", CR, MIS13_MSG);
- X ansi("me");
- X
- X do {
- X protokoll = getint();
- X if (protokoll >= 97) protokoll -= 32;
- X if (protokoll == '?') {
- X clearline();
- X ansi("mr");
- X printf("%c%s > ", CR, MIS14_MSG);
- X ansi("me");
- X }
- X if ((protokoll != MIS15_MSG) && (protokoll != MIS15_MSG) &&
- X (protokoll != MIS18_MSG) && (protokoll != MIS17_MSG ))
- X protokoll = 0;
- X } while (protokoll == 0);
- X
- X printf("%c", protokoll);
- X
- X }
- X sprintf(tmp, "%s/A%d", TMP, getpid());
- X sprintf(cmdl, "%s %s", EDDY, tmp);
- X sprintf(pubdir, "%s/dir%d", TMP, getpid());
- X
- X if (c == MIS09_MSG) {
- X noctrlx();
- X system(cmdl);
- X ctrlx();
- X protokoll = '*';
- X }
- X else { /* UPLOAD */
- X
- X printf("\n\n");
- X ansi("md");
- X printf("%s", MIS19_MSG);
- X ansi("me");
- X
- X switch (protokoll) {
- X case MIS15_MSG:
- X fp = fopen(tmp, "w");
- X if (fp == NULL) {
- X nerror("misc.c", 310, "schreiben", "DSF", tmp);
- X }
- X c = 0;
- X lf = CR;
- X fputc(LF, fp);
- X
- X while ((c != CTRL_X) && (c != CTRL_D)) {
- X c = getint();
- X if ((c == CR) && (lf == CR))
- X fputc(LF, fp);
- X if (c == CR) lf = CR;
- X if (c == LF) lf = LF;
- X if ((c != CTRL_X) && (c != CTRL_D) && (c != CR)) {
- X fputc(c, fp);
- X }
- X }
- X fclose(fp);
- X break;
- X case MIS16_MSG:
- X printf("\n");
- X sprintf(s, "exec %s -bc TimeTravelAgency 2> /dev/null", RX);
- X break;
- X case MIS17_MSG:
- X printf("\n");
- X sprintf(s, "exec %s -b 2> /dev/null", RB);
- X break;
- X case MIS18_MSG:
- X printf("\n");
- X sprintf(s, "exec %s -b 2> /dev/null", RZ);
- X break;
- X }
- X if (protokoll != MIS15_MSG){
- X mkdir( pubdir, 0777 );
- X chdir( pubdir );
- X
- X time(&ts);
- X system( s );
- X time(&tn); tn = tn - ts;
- X tn -= 10; /* 10 = "Toleranz" */
- X
- X chdir( HOME );
- X sprintf(s, "mv %s/* %s", pubdir, tmp);
- X system( s );
- X sprintf(s, "rm -r %s", pubdir);
- X system( s );
- X }
- X sync();
- X stat(tmp, &fst);
- X if (fst.st_size < 3L) {
- X printf("\n\n%s\n", MIS20_MSG);
- X control(MIS21_MSG, 3);
- X unlink(tmp);
- X return;
- X }
- X if (prf(tmp) == 1) {
- X if (strcomp(PDNG, NG) == 0) {
- X USER.upratio += ((long) fst.st_size / 1024);
- X }
- X BINFILE++;
- X sprintf(s, MIS22_MSG);
- X }
- X else{
- X mkix(tmp);
- X sprintf(s, MIS23_MSG);
- X }
- X ansi( "md" );
- X printf("\n\n%ld %s %s %s.\n", fst.st_size, MIS24_MSG, s, MIS25_MSG);
- X ansi( "me" );
- X if(tn < 1) tn = 1L;
- X printf("%s %d cps (ca. %d bps).", MIS26_MSG,
- X (fst.st_size / tn), ((fst.st_size / tn) * 11));
- X }
- X }
- X
- X sprintf(iam, "%s <%s@%s>", USER.name, username, UUCPID);
- X sprintf(reply, "%s@%s (%s)", username, UUCPID, USER.name);
- X strcpy(newsgroups, group);
- X if (USER.level < WRITE_EX_LEV) {
- X strcpy(distribution, "local");
- X }
- X else {
- X /*
- X strcpy(ng, NG);
- X i = 0;
- X while ((ng[i] != '.') && (ng[i] != '\0')) i++;
- X ng[i] = '\0';
- X strcpy(distribution, ng);
- X */
- X strcpy(distribution, "world");
- X }
- X if(refs[0] != '\0') strcat(refs, " ");
- X strcat(refs, msid);
- X followup[0] = '\0';
- X sender[0] = '\0';
- X ctrl[0] = '\0';
- X expires[0] = '\0';
- X approved[0] = '\0';
- X app = 0;
- X content[0] = '\0';
- X
- X#if defined(_MULTIMEDIA) && defined(_UMLAUT)
- X strcpy(content, (unsigned char *) "text/plain; charset=iso-8859-1");
- X#endif
- X
- X ONCE_MORE:
- X
- X printf("\n\n");
- X ansi("mr");
- X if(BINFILE == 0){
- X printf("[%s] %s, ? > ", NG, MIS27_MSG);
- X }
- X else{
- X printf("[%s] %s, ? > ", NG, MIS28_MSG);
- X }
- X ansi("me");
- X printf("%c%c", MIS29_MSG, BS);
- X
- X do {
- X c = getint();
- X if (c >= 97) c -= 32;
- X if (c == '?') {
- X clearline();
- X ansi("mr");
- X if(BINFILE == 0){
- X printf("%c%s > ", CR, MIS32_MSG);
- X }
- X else{
- X printf("%c%s > ", CR, MIS33_MSG);
- X }
- X ansi("me");
- X }
- X if (c == ENTER) c = MIS29_MSG;
- X if ((c != MIS29_MSG) && (c != MIS30_MSG) && (c != MIS31_MSG) && (c != MIS31aMSG)) c = 0;
- X } while (c == 0);
- X
- X printf("%c", c);
- X if (c == MIS30_MSG) {
- X unlink(f);
- X unlink(s);
- X unlink(t);
- X unlink(tmp); /* ??? */
- X unlink(rep);
- X printf("\n");
- X return;
- X }
- X if ((c == MIS31_MSG) && (BINFILE == 0)) {
- X noctrlx();
- X system(cmdl);
- X ctrlx();
- X goto ONCE_MORE;
- X }
- X if (c == MIS31aMSG) { /* HEADER */
- X headline( MIS38aMSG );
- X printf("\n");
- X time(&tdummy);
- X
- X ansi( "md" );
- X printf("From: ");
- X ansi( "me" );
- X if(USER.level > ADMIN_LEV){
- X strcpy(s, (unsigned char *) getline(80, -1001, 32, iam));
- X if(strcomp(s, iam) != 0) app++;
- X if(s[0] != '\0') strcpy(iam, s);
- X printf("\n");
- X }
- X else printf("%s\n", iam);
- X
- X ansi( "md" );
- X printf("Reply-To: ");
- X ansi( "me" );
- X if(USER.level > GUEST_LEV){
- X strcpy(reply, (unsigned char *) getline(80, -1001, 32, reply));
- X printf("\n");
- X }
- X else printf("%s\n", reply);
- X
- X ansi( "md" );
- X printf("Sender: ");
- X ansi( "me" );
- X if(USER.level >= ADMIN_LEV){
- X strcpy(sender, (unsigned char *) getline(80, -1001, 32, sender));
- X printf("\n");
- X }
- X else printf("%s\n", sender);
- X
- X ansi( "md" );
- X printf("Control: ");
- X ansi( "me" );
- X if(USER.level >= ADMIN_LEV){
- X strcpy(ctrl, (unsigned char *) getline(80, -1001, 32, ctrl));
- X printf("\n");
- X }
- X else printf("%s\n", ctrl);
- X
- X ansi( "md" );
- X printf("Approved: ");
- X ansi( "me" );
- X if(app != 0) sprintf(approved, "%s <%s@%s>", USER.name, username, UUCPID);
- X if(USER.level >= EXE_LEV){
- X strcpy(approved, (unsigned char *) getline(80, -1001, 32, approved));
- X printf("\n");
- X }
- X else printf("%s\n", approved);
- X
- X ansi( "md" );
- X printf("Newsgroups: ");
- X ansi( "me" );
- X if(USER.level >= WRITE_EX_LEV){
- X strcpy(newsgroups, (unsigned char *) getline(80, -1001, 32, newsgroups));
- X printf("\n");
- X i = 0;
- X while(newsgroups[i] != '\0'){
- X if(newsgroups[i] == ' '){
- X strcpy(s, (unsigned char *) newsgroups);
- X newsgroups[i] = '\0';
- X strcat(newsgroups, (unsigned char *) strcopy(s, (i+1), 80));
- X i--;
- X }
- X i++;
- X }
- X }
- X else printf("%s\n", newsgroups);
- X
- X ansi( "md" );
- X printf("Distribution: ");
- X ansi( "me" );
- X if(USER.level >= WRITE_INTERNAT){
- X strcpy(distribution, (unsigned char *) getline(80, -1001, 32, distribution));
- X printf("\n");
- X }
- X else printf("%s\n", distribution);
- X
- X ansi( "md" );
- X printf("Followup-To: ");
- X ansi( "me" );
- X if(USER.level >= WRITE_EX_LEV){
- X strcpy(followup, (unsigned char *) getline(80, -1001, 32, followup));
- X printf("\n");
- X }
- X else printf("%s\n", followup);
- X
- X ansi( "md" );
- X printf("Subject: ");
- X ansi( "me" );
- X strcpy(subj, (unsigned char *) getline(80, -1001, 32, subj));
- X
- X ansi( "md" );
- X printf("\nKeywords: ");
- X ansi( "me" );
- X strcpy(keyw, (unsigned char *) getline(80, -1001, 32, keyw));
- X
- X ansi( "md" );
- X printf("\nSummary: ");
- X ansi( "me" );
- X strcpy(summ, (unsigned char *) getline(80, -1001, 32, summ));
- X
- X#ifdef _MULTIMEDIA
- X
- X if(USER.level >= WRITE_INTERNAT){
- X if(content[0] == '\0')
- X strcpy(content, (unsigned char *) "text/plain; charset=us-ascii");
- X ansi( "md" );
- X printf("\nContent-Type: ");
- X ansi( "me" );
- X strcpy(content, (unsigned char *) getline(80, -1001, 32, content));
- X }
- X#endif
- X
- X ansi( "md" );
- X printf("\nX-News-Reader: ");
- X ansi( "me" );
- X printf("%s %s %s\n", VERSION, PATCHLEVEL, AUTOR);
- X
- X ansi( "md" );
- X printf("References: ");
- X ansi( "me" );
- X printf("%s\n", refs);
- X
- X ansi( "md" );
- X printf("Message-ID: ");
- X ansi( "me" );
- X printf("<%x.%d@%s>\n", tdummy, USER.id, UUCPID);
- X
- X ansi( "md" );
- X printf("Expires: ");
- X ansi( "me" );
- X if(USER.level >= WRITE_INTERNAT){
- X strcpy(expires, (unsigned char *) getline(80, -1001, 32, expires));
- X printf("\n");
- X }
- X else printf("%s\n", expires);
- X
- X goto ONCE_MORE;
- X }
- X
- X ansi( "md" );
- X printf("\n\n%s\n", MIS34_MSG);
- X ansi( "me" );
- X
- X sprintf(f, "%s/A%d", TMP, getpid());
- X sprintf(t, "%s/B%d", TMP, getpid());
- X
- X fp = fopen(f, "r");
- X if (fp == NULL) {
- X printf("\n");
- X ansi("md");
- X printf("%s ...\n", MIS35_MSG);
- X ansi("me");
- X control(MIS36_MSG, 3);
- X unlink(rep);
- X return;
- X }
- X
- X ff = fopen(t, "w");
- X
- X time(&tdummy);
- X
- X fprintf(ff, "From: %s\n", iam);
- X if(reply[0] != '\0')
- X fprintf(ff, "Reply-To: %s\n", reply);
- X if(sender[0] != '\0')
- X fprintf(ff, "Sender: %s\n", sender);
- X if(approved[0] != '\0')
- X fprintf(ff, "Approved: %s\n", approved);
- X if(newsgroups[0] != '\0')
- X fprintf(ff, "Newsgroups: %s\n", newsgroups);
- X if(distribution[0] != '\0')
- X fprintf(ff, "Distribution: %s\n", distribution);
- X if(ctrl[0] != '\0')
- X fprintf(ff, "Control: %s\n", ctrl);
- X if(followup[0] != '\0')
- X fprintf(ff, "Followup-To: %s\n", followup);
- X if(subj[0] != '\0')
- X fprintf(ff, "Subject: %s\n", subj);
- X if(keyw[0] != '\0')
- X fprintf(ff, "Keywords: %s\n", keyw);
- X if(summ[0] != '\0')
- X fprintf(ff, "Summary: %s\n", summ);
- X if(content[0] != '\0'){
- X fprintf(ff, "Content-Type: %s\n", content);
- X#ifdef _UMLAUT
- X fprintf(ff, "Content-Transfer-Encoding: 8bit\n");
- X#endif
- X }
- X fprintf(ff, "X-News-Reader: %s %s %s\n", VERSION, PATCHLEVEL, AUTOR);
- X fprintf(ff, "Message-ID: <%x.%d@%s>\n", tdummy, USER.id, UUCPID);
- X if(expires[0] != '\0')
- X fprintf(ff, "Expires: %s\n", expires);
- X if(refs[0] != '\0')
- X fprintf(ff, "References: %s\n", refs);
- X fputs("\n", ff);
- X
- X if (BINFILE == 0) {
- X UMLAUT_MODUS = 1;
- X while (fgets(s, 80, fp) != 0) {
- X fputs((unsigned char *) iso_line(s), ff);
- X }
- X }
- X else {
- X time(&tdummy);
- X fputs("BINFILE\n", ff);
- X sprintf(s, "%s/PD.%d", BRETT, tdummy);
- X fputs(s, ff);
- X sprintf(f, "cp %s %s &", tmp, s);
- X system(f);
- X sprintf(s, "\n/public/pd/%s\n", subj);
- X fputs(s, ff);
- X fl = fopen( PDSCRIPT, "a" );
- X fprintf(fl, "mv %s/PD.%d /public/pd/%s\n", BRETT, tdummy, subj);
- X fclose(fl);
- X }
- X fclose(fp);
- X unlink(f);
- X
- X unlink(rep);
- X
- X if ((USER.level > WRITE_IN_LEV) && (BINFILE == 0)) {
- X sprintf(s, "%s/usr/%d/.signature", HOME, USER.id);
- X fp = fopen(s, "r");
- X if (fp != NULL) {
- X while (fgets(s, 80, fp) != 0) {
- X fputs((unsigned char *) iso_line(s), ff);
- X }
- X fclose(fp);
- X }
- X }
- X fclose(ff);
- X
- X UMLAUT_MODUS = USER.schluessel[2];
- X
- X sprintf(ex, "/bin/sh ./etc/inews.sh %s %s", NG, t);
- X system(ex);
- X
- X unlink(t);
- X
- X sprintf(s, "%s \"%s\" %s", MIS37_MSG, NG, MIS38_MSG);
- X control(s, 3);
- X
- X
- X if(BINFILE != 0){
- X maybe_locked(NGROUPS, "r");
- X fp = fopen(NGROUPS, "r");
- X if (fp == NULL) {
- X nerror("misc.c", 895, "schreiben", "Datei-Lesefehler", NGROUPS);
- X }
- X
- X ok = 0;
- X
- X while ((ok == 0) && (fscanf(fp, "%s %d %d %s", s, &a, &b, f) > 0)) {
- X if(strcomp(NG, s) == 0){
- X i = a;
- X ok = 1;
- X }
- X }
- X fclose(fp);
- X
- X fl = fopen( PDSCRIPT, "a" );
- X fprintf(fl, "mined %s/%d\n", BRETT, i);
- X fprintf(fl, "#%s %s\n\n", NG, USER.name);
- X fclose(fl);
- X }
- X
- X printf("%s", MIS39_MSG);
- X
- X#ifndef _SYS7
- X sleep(30); /* Scheinbar laeuft INEWS bei SYSV im Hintergrund */
- X#endif
- X
- X sprintf(s, "%s %s", MB_DAEMON, group);
- X system(s);
- X unlink(tmp);
- X printf("\n");
- X }
- X else {
- X ansi("md");
- X printf(" %s\n\n", MIS40_MSG);
- X ansi("me");
- X }
- X umask(0007);
- X
- X /*
- X
- X Better not use the following! It's a not yet complete implemented
- X new feature - the beginning of a threated NEWSREADER...
- X
- X sprintf(s, "%s/usr/%d/.dis", HOME, USER.id);
- X fp = fopen(s, "a");
- X fprintf(fp, "%-32.32s %-21.21s %x.%d %s\n", NG, subj, tdummy, USER.id, (unsigned char *) mydate( 0 ));
- X fclose(fp);
- X */
- X
- X}
- X
- X
- X
- X
- X
- X/***************************************************************************/
- X/* FUNKTION prf() */
- X/* BESCHREIBUNG Stellt fest, ob eine Datei (die per UPLOAD empfangen */
- X/* wurde) einen Text oder ein ausfuehrbares Programm ent- */
- X/* haelt. */
- X/* PARAMETER arg = Dateiname */
- X/* RUECKGABE 0 = Text-Datei */
- X/* 1 = Ausfuehrbares Programm */
- X/***************************************************************************/
- X
- Xint prf(arg)
- Xunsigned char arg[];
- X{
- X FILE *fp;
- X unsigned char ex[255];
- X int i, a;
- X
- X fp = fopen(arg, "r");
- X if (fp == NULL) return -1;
- X while ((fgets(ex, 250, fp) != NULL) && (strlen(ex) < 30));
- X fclose(fp);
- X
- X i = 0;
- X a = 0;
- X while (ex[i] != '\0') {
- X if ((ex[i] < 32) || (ex[i] > 127)) a++;
- X i++;
- X }
- X if (a > 3) return 1; /* BINFILE */
- X
- X return 0; /* TEXTFILE */
- X}
- X
- X
- X
- X
- X/***************************************************************************/
- X/* FUNKTION pruefe() */
- X/* BESCHREIBUNG Stellt fest, ob eine Datei aus den News-Artikeln die */
- X/* Kennung "BINFILE" enthaelt. Faellt die Antwort positiv */
- X/* aus, wird die Routine "pd()" aufgerufen. */
- X/* PARAMETER arg = Nummer des Artikels */
- X/* RUECKGABE 0 = Text-Datei */
- X/* 1 = BINFILE */
- X/***************************************************************************/
- X
- Xint pruefe(arg)
- Xunsigned char arg[];
- X{
- X FILE *fp;
- X unsigned char ex[255];
- X unsigned char s[STRING];
- X unsigned char entry[STRING];
- X unsigned char keywds[STRING];
- X
- X if ((arg[0] == '\0') || (arg[0] == '*')) return -1;
- X
- X if (strcomp(BRETT, "PM") != 0) {
- X sprintf(entry, "%s/%s", BRETT, arg);
- X }
- X else {
- X sprintf(entry, "%s/usr/%d/%s", HOME, USER.id, arg);
- X }
- X
- X keywds[0] = '\0';
- X
- X fp = fopen(entry, "r");
- X if (fp == NULL) return -1;
- X
- X while ((fgets(ex, 250, fp) != NULL) && (ex[0] > 32)){
- X if(strcomp("Keywords: ", ex) == 0){
- X ex[80] = '\0';
- X strcpy(keywds, strcopy(ex, 10, 80));
- X }
- X }
- X
- X while ((fgets(ex, 250, fp) != NULL) && (ex[0] < 32));
- X
- X if (strcomp("BINFILE", ex) == 0) {
- X fgets(s, 80, fp);
- X fclose(fp);
- X pd(s, keywds);
- X return 1;
- X }
- X fclose(fp);
- X
- X return 0;
- X}
- X
- X
- X
- X
- X
- X
- END_OF_FILE
- if test 23300 -ne `wc -c <'src/misc.c'`; then
- echo shar: \"'src/misc.c'\" unpacked with wrong size!
- fi
- # end of 'src/misc.c'
- fi
- if test -f 'src/uptodate.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/uptodate.c'\"
- else
- echo shar: Extracting \"'src/uptodate.c'\" \(2961 characters\)
- sed "s/^X//" >'src/uptodate.c' <<'END_OF_FILE'
- X/***************************************************************************/
- X/* PROGRAMM ix/Mbox */
- X/* DATEI update.c */
- X/* FUNKTIONEN uptodate() */
- X/* AUTOR vs (Volker Schuermann/MINIX-Version) */
- X/* LETZTE AENDERUNG 16.03.1993 */
- X/***************************************************************************/
- X
- X#include <stdio.h>
- X
- X#include "mbox.h"
- X
- X/*
- X WARNING! This part of the ix/MBox automagically generates an
- X update-request every month. This request is sent to "unnet!mbox"
- X in germany.
- X
- X If there are any bugfixes, infosheets etc., you'll get them
- X via mailserver as an reply to the update-request.
- X
- X The update-request includes some informations about your BBS:
- X name, uucp-address, sysops name, number of accounts&caller etc. ...
- X
- X Maybe this data will be used to build reference-lists or will
- X be mentioned in infosheets.
- X
- X
- X If you don't want|like that, please change the following
- X defines!!!
- X*/
- X
- X#define NO_UPDATE 0 /* 1 means: absolutly no update-requests */
- X#define NO_DETAILS 0 /* 1 means: don't send any data */
- X
- X
- X
- Xuptodate()
- X{
- X
- X#if !NO_UPDATE
- X
- X FILE *fp;
- X
- X char s[STRING];
- X char t[STRING];
- X char d[STRING];
- X
- X int accounts;
- X int calls;
- X int month;
- X
- X
- X if(USER.level < WRITE_EX_LEV) return;
- X
- X strcpy(d, (unsigned char *) mydate( 1 ));
- X month = atoi(strcopy(d, 3, 4));
- X sprintf(s, "%s/etc/uptodate.%d", HOME, month);
- X fp = fopen(s, "r");
- X if(fp != NULL){
- X fclose(fp);
- X return;
- X }
- X fp = fopen(s, "w");
- X fprintf(fp, "Update requested: %s at %s", mydate( 1 ), mytime( 0 ));
- X fclose(fp);
- X
- X if(month == 1) month = 13;
- X month--;
- X
- X sprintf(s, "%s/etc/uptodate.%d", HOME, month);
- X unlink( s );
- X
- X sprintf(s, "%s/etc/users.seq", HOME);
- X fp = fopen(s, "r");
- X fgets(s, 80, fp);
- X fclose(fp);
- X accounts = atoi(s);
- X
- X sprintf(s, "%s/etc/mbox.seq", HOME);
- X fp = fopen(s, "r");
- X fgets(s, 80, fp);
- X fclose(fp);
- X calls = atoi(s);
- X
- X sprintf(s, "%s/usr/%d/.lastletter", HOME, USER.id);
- X fp = fopen(s, "w");
- X fprintf(fp, "This is %s %s, on <%s>!\n\n", VERSION, PATCHLEVEL, UUCPID1);
- X
- X#if !NO_DETAILS
- X fprintf(fp, "My sysop %s of %s\n", POSTMASTER, ORGANIZATION);
- X fprintf(fp, "wants update patches, infosheets and so on ...\n\n");
- X fprintf(fp, "Our systems' called \"%s\",\n", SYSTEM);
- X fprintf(fp, "and we joggle around with %d users (%d calls) at this moment.\n\n", accounts, calls);
- X#endif /* NO_DETAILS */
- X
- X fprintf(fp, "If you can't reach us, call <%s> or <%s> ...\n\n", UUCPID2, SMARTHOST);
- X fclose(fp);
- X
- X sprintf(s, "%s/usr/%d/.lastsubject", HOME, USER.id);
- X fp = fopen(s, "w");
- X fprintf(fp, "UPDATE-RQ <%s>", UUCPID1);
- X fclose(fp);
- X
- X brief( "mbox@unnet.w.open.DE?" );
- X
- X#endif /* NO_UPDATE */
- X
- X}
- X
- END_OF_FILE
- if test 2961 -ne `wc -c <'src/uptodate.c'`; then
- echo shar: \"'src/uptodate.c'\" unpacked with wrong size!
- fi
- # end of 'src/uptodate.c'
- fi
- echo shar: End of archive 6 \(of 15\).
- cp /dev/null ark6isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 15 archives.
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still must unpack the following archives:
- echo " " ${MISSING}
- fi
- exit 0
- exit 0 # Just in case...
-