1: #define MAINLINE 2: 3: #ifdef RCSIDENT 4: static char rcsid[] = "$Header: nfrcv.c,v 1.7.0.2 86/09/23 08:26:00 notes Rel $"; 5: #endif RCSIDENT 6: 7: /* 8: * netrcv - load a notefile from the network 9: * accepts 2 parameters (1) the source system 10: * (2) the notefile to load into 11: * 12: * This program should be called only by the netload program 13: * or a suitably informed user/wizard 14: * 15: * Original author: Ray Essick december 1981 16: */ 17: 18: #include "parms.h" 19: #include "structs.h" 20: #include "net.h" 21: 22: main (argc, argv) 23: char **argv; 24: { 25: struct io_f io; 26: FILE * log, /* network logfile */ 27: *fopen (); 28: char fn[WDLEN]; /* network logfile */ 29: char nowtime[DATELEN]; 30: char buf[CMDLEN]; 31: struct when_f atime; 32: int fid; /* for close loop */ 33: 34: setuid (geteuid ()); /* force to notes */ 35: startup (argc, argv); /* common init */ 36: 37: /* 38: * make damn sure we have enough file descriptors 39: */ 40: for (fid = 3; fid < 20; fid++) 41: close (fid); 42: 43: if (argc != 3) 44: { 45: printf ("Usage: %s notefile fromsystem\n", argv[0]); 46: exit (BAD); 47: } 48: 49: sprintf (fn, "%s/%s/%s", Mstdir, UTILITY, NETLOG); 50: gettime (&atime); 51: sprdate (&atime, nowtime); 52: 53: if (init (&io, argv[1]) < 0) 54: { 55: #ifdef AUTOCREATE /* if making 'em */ 56: if (argv[1][0] == '/') /* absolute? */ 57: { 58: #ifdef NFMAINT 59: { 60: char tbuf[128]; /* title */ 61: sprintf (buf, "%s: non-existent notesfile from %s\nAborted by nfrcv\n", 62: argv[1], argv[2]); 63: sprintf (tbuf, "Nfrcv ignores %s", argv[1]); 64: nfcomment (NFMAINT, buf, tbuf, 0, 0); 65: } 66: #endif NFMAINT 67: printf ("Nfrcv: %s: no autocreate for absolute pathnames\n", 68: argv[1]); 69: exit (BAD); /* abort */ 70: } 71: buildnf (argv[1], Mstdir, 0, 1, 1); /* no anon, open, networked */ 72: x (init (&io, argv[1]) < 0, "nfrcv: couldn't create notesfile"); 73: #ifdef NFMAINT 74: { 75: char tbuf[128]; /* title */ 76: sprintf (buf, "%s: non-existent notesfile from %s created by nfrcv\n", 77: argv[1], argv[2]); 78: if (strlen (argv[1]) >= 14) 79: { 80: /* 81: * could be a truncation error; mark that in the message 82: */ 83: sprintf (tbuf, "\n'%s' >= 14 characters long; check for abbreviations\n", 84: argv[1]); 85: strcat (buf, tbuf); 86: } 87: sprintf (tbuf, "Nfrcv creates %s", argv[1]); 88: nfcomment (NFMAINT, buf, tbuf, TRUE, 0); 89: } 90: #endif NFMAINT 91: 92: #else /* just tell about it */ 93: x ((log = fopen (fn, "a")) == NULL, "netrcv: bad log open"); 94: sprintf (buf, "%s: Non-existent notesfile received from %s at %s\n", 95: argv[1], argv[2], nowtime); 96: fprintf (log, "%s", buf); /* log it in the log */ 97: x (fclose (log) == EOF, "netrcv: bad close of log file"); 98: #ifdef NFMAINT /* log it in a nf also? */ 99: nfcomment (NFMAINT, buf, "non-notesfile to nfrcv", 0, 0); 100: #endif 101: exit (NONF); 102: #endif AUTOCREATE /* of autocreate else clause */ 103: } 104: 105: if ((io.descr.d_stat & NETWRKD) == 0) 106: { 107: printf ("%s is not a networked notefile on %s\n", argv[1], System); 108: finish (&io); 109: x ((log = fopen (fn, "a")) == NULL, "netrcv: bad log open"); 110: fprintf (log, "%s: Non-networked notesfile received from %s at %s\n", 111: argv[1], argv[2], nowtime); 112: x (fclose (log) == EOF, "netrcv: bad close of log file"); 113: exit (NONF); /* un-networked appears not there */ 114: } 115: 116: loadem (&io, stdin, LOCKIT, argv[2], NODETAIL, -1); 117: 118: x ((log = fopen (fn, "a")) == NULL, "netrcv: couldnt open log file"); 119: fprintf (log, "%s: insert (%d,%d), drop (%d,%d) from %s at %s\n", 120: argv[1], io.nnotrcvd, io.nrsprcvd, io.nnotdrop, io.nrspdrop, 121: argv[2], nowtime); 122: x (fclose (log) == EOF, "netrcv: bad close of log file"); 123: 124: #ifdef STATS 125: locknf (&io, DSCRLOCK); /* bump count of netowrk calls rcvd */ 126: getdscr (&io, &io.descr); 127: io.descr.netwrkins++; /* bump the count */ 128: putdscr (&io, &io.descr); 129: unlocknf (&io, DSCRLOCK); 130: #endif STATS 131: 132: printf ("%s: Inserted: (%d,%d) Dropped: (%d,%d)\n", 133: argv[1], io.nnotrcvd, io.nrsprcvd, io.nnotdrop, io.nrspdrop); 134: 135: finish (&io); 136: exit (GOOD); 137: }