home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume14 / nntp1.5 / patch3 < prev    next >
Text File  |  1989-03-03  |  7KB  |  287 lines

  1. Description:
  2.         1. Under the history mechanism that does not use DBM, files are not
  3.            closed following use. This causes the process to run of file
  4.            descriptors & nntpd to abort. The nntp log file will show this with
  5.            "No more files" messages.
  6.         2. There was no graceful way for any version of nntp to stop a transfer
  7.            when there was no space left in the news SPOOLDIR. This can cause
  8.            many aborted connections and sometimes lost news
  9.  
  10. Repeat by:
  11.         1. Make nntpd for a system that does not use the DBM form of the
  12.            history file. Watch the nntp log during a large transfer of
  13.            articles from another feed site. Notice the "No more files"
  14.            messages after about 20 articles transfer.
  15.         2. Fill up the news SPOOLDIR and then watch the nntp log file as more
  16.            articles come in.
  17.  
  18. Fix:
  19.  
  20. Apply the following patches after you have change directory to nntp.1.5.
  21. Then rebuild nntpd and reinstall. To use the space detection feature, you
  22. must have MINFREE defined in defs.h of your _news_ sources. News 2.11 is
  23. assumed to be your current release of netnews.
  24.  
  25. Index: server/misc.c
  26. *** server/misc.c    Fri May  6 18:36:16 1988
  27. --- ../../nntp_gazette/server/misc.c    Sun Sep 18 20:57:51 1988
  28. ***************
  29. *** 218,224 ****
  30.       (void) strcpy(path, spooldir);
  31.       (void) strcat(path, "/");
  32.       (void) strcat(path, tmp);
  33.       return (path);
  34.   }
  35.   
  36. --- 218,226 ----
  37.       (void) strcpy(path, spooldir);
  38.       (void) strcat(path, "/");
  39.       (void) strcat(path, tmp);
  40. ! #ifdef USGHIST
  41. !     (void) fclose(hfp);
  42. ! #endif
  43.       return (path);
  44.   }
  45.   
  46. ***************
  47. *** 583,588 ****
  48. --- 585,591 ----
  49.   }
  50.   #endif USGHIST
  51.   #ifdef USG
  52. + #ifndef GAZETTE
  53.   bcopy(s, d, l)
  54.       register char *s, *d;
  55.       register int l;
  56. ***************
  57. *** 613,618 ****
  58. --- 616,622 ----
  59.       while (l-- > 0)
  60.           *p++ = 0;
  61.   }
  62. + #endif
  63.   
  64.   dup2(x,y)
  65.   int x,y;
  66. ***************
  67. *** 619,623 ****
  68. --- 623,647 ----
  69.   { 
  70.       close(y); 
  71.       return(fcntl(x, F_DUPFD,y ));
  72. + }
  73. + #include <ustat.h>
  74. + /* 
  75. +  * determine if there is enough free space on the device
  76. +  * return 0 if there is and
  77. +  * anything appropriate if there is not 
  78. +  * written by Stan Barber (sob@soma.bcm.tmc.edu)
  79. +  */
  80. + int
  81. + space()
  82. + {
  83. +     struct stat file;
  84. +     struct ustat device;
  85. +     if (stat(SPOOLDIR,&file))
  86. +         return(-1);    /* can't stat spool */
  87. +     if (ustat(file.st_dev, &device))
  88. +         return(-2);    /* can't stat the device */
  89. +     if(device.f_tfree < MINFREE) return(-3);
  90. +     return(0);
  91.   }
  92.   #endif USG
  93.  
  94.  
  95. Index: server/main.c
  96. *** server/main.c    Fri May  6 18:36:15 1988
  97. --- ../../nntp_gazette/server/main.c    Sun Sep 18 20:58:25 1988
  98. ***************
  99. *** 33,38 ****
  100. --- 33,43 ----
  101.   
  102.       /* fd 0-2 should be open and point to / now. */
  103.   
  104. +     /* Let's close all the other FD's just to be sure */
  105. +     for(sockt = 3; sockt < 40; sockt++)
  106. +         (void) close(sockt);
  107. + #ifndef FAKESYSLOG
  108.   #ifdef SYSLOG
  109.   #ifdef BSD_42
  110.       openlog("nntpd", LOG_PID);            /* fd 3 */
  111. ***************
  112. *** 40,45 ****
  113. --- 45,51 ----
  114.       openlog("nntpd", LOG_PID, SYSLOG);        /* fd 3 */
  115.   #endif
  116.   #endif
  117. + #endif
  118.   
  119.   #ifdef FASTFORK
  120.       num_groups = read_groups();    /* Read active file now (fd 4) */
  121. ***************
  122. *** 71,78 ****
  123.               continue;
  124.   #ifdef USG
  125.           (void) signal(SIGCLD, SIG_IGN);
  126. ! #endif
  127.           bzero((char *)&from,sizeof(from));
  128.           client = accept(sockt, &from);
  129.   #else
  130.           length = sizeof (from);
  131. --- 77,86 ----
  132.               continue;
  133.   #ifdef USG
  134.           (void) signal(SIGCLD, SIG_IGN);
  135. !         memset((char *)&from,'\0',sizeof(from));
  136. ! #else
  137.           bzero((char *)&from,sizeof(from));
  138. + #endif
  139.           client = accept(sockt, &from);
  140.   #else
  141.           length = sizeof (from);
  142. ***************
  143. *** 109,115 ****
  144. --- 117,128 ----
  145.   #ifdef EXCELAN
  146.                   if (fork())
  147.                       exit(0);
  148. + #ifdef USG
  149. +                 (void * )memcpy(¤t_peer,&from,
  150. +                      sizeof(from));
  151. + #else
  152.                   bcopy(&from,¤t_peer,sizeof(from));
  153. + #endif
  154.                   make_stdio(sockt);
  155.   #else
  156.                   (void) close(sockt);
  157.  
  158. Index: server/serve.c
  159. *** server/serve.c    Fri May  6 18:36:17 1988
  160. --- ../../nntp_gazette/server/serve.c    Sun Sep 18 20:59:02 1988
  161. ***************
  162. *** 74,79 ****
  163. --- 74,81 ----
  164.       double        user, sys;
  165.   #ifdef USG
  166.       time_t        start, finish;
  167. +     extern int    space();
  168. +     int        out_of_space;
  169.   #else not USG
  170.       struct timeval    start, finish;
  171.   #endif not USG
  172. ***************
  173. *** 103,114 ****
  174.   
  175.       /* If we're ALONE, then we've already opened syslog */
  176.   
  177. ! #ifndef ALONE
  178. ! # ifdef SYSLOG
  179. ! #  ifdef BSD_42
  180.       openlog("nntpd", LOG_PID);
  181. ! #  else
  182.       openlog("nntpd", LOG_PID, SYSLOG);
  183.   #  endif
  184.   # endif
  185.   #endif
  186. --- 105,118 ----
  187.   
  188.       /* If we're ALONE, then we've already opened syslog */
  189.   
  190. ! #ifndef FAKESYSLOG
  191. ! # ifndef ALONE
  192. ! #  ifdef SYSLOG
  193. ! #   ifdef BSD_42
  194.       openlog("nntpd", LOG_PID);
  195. ! #   else
  196.       openlog("nntpd", LOG_PID, SYSLOG);
  197. + #   endif
  198.   #  endif
  199.   # endif
  200.   #endif
  201. ***************
  202. *** 140,145 ****
  203. --- 144,162 ----
  204.           exit(1);
  205.       }
  206.   
  207. + #ifdef USG
  208. +     if (space() < 0 && !canpost ) {
  209. +         printf("%d %s NNTP server out of space. Try later.\r\n",
  210. +             ERR_FAULT, host);
  211. +         (void) fflush(stdout);
  212. + #ifdef LOG
  213. +         syslog(LOG_INFO, "%s no space", hostname);
  214. + #endif
  215. +         exit(1);
  216. +     }
  217. +     out_of_space = 0;
  218. + #endif
  219.       /* If we can talk, proceed with initialization */
  220.   
  221.       ngpermcount = get_nglist(&ngpermlist, gdbuf);
  222. ***************
  223. *** 209,214 ****
  224. --- 226,237 ----
  225.                   *cp = '\0';
  226.           }
  227.   
  228. + #ifdef USG
  229. +         if (space() < 0 && !canpost ) {
  230. +             out_of_space++;
  231. +             break;
  232. +         }
  233. + #endif
  234.           if ((argnum = parsit(line, &argp)) == 0)
  235.               continue;        /* Null command */
  236.           else {
  237. ***************
  238. *** 235,243 ****
  239.   #endif TIMEOUT
  240.       }
  241.   
  242. !     printf("%d %s closing connection.  Goodbye.\r\n", OK_GOODBYE, host);
  243. !     (void) fflush(stdout);
  244.   
  245.   
  246.   #ifdef LOG
  247.       if (ferror(stdout))
  248. --- 258,276 ----
  249.   #endif TIMEOUT
  250.       }
  251.   
  252. ! #ifdef USG
  253. !     if(out_of_space) {
  254. !         printf("%d %s NNTP server out of space. Quitting.\r\n",
  255. !             ERR_GOODBYE, host);
  256. ! #ifdef LOG
  257. !         syslog(LOG_INFO, "%s no space", hostname);
  258. ! #endif
  259. !     } else 
  260. ! #endif
  261. !         printf("%d %s closing connection.  Goodbye.\r\n",
  262. !             OK_GOODBYE, host);
  263.   
  264. +     (void) fflush(stdout);
  265.   
  266.   #ifdef LOG
  267.       if (ferror(stdout))
  268.  
  269. Index: common/version.c
  270. *** common/version.c    Thu Feb 25 22:02:33 1988
  271. --- ../../nntp_gazette/common/version.c    Sun Sep 18 21:03:06 1988
  272. ***************
  273. *** 2,5 ****
  274.    * Provide the version number of this release.
  275.    */
  276.   
  277. ! char    nntp_version[] = "1.5 (26 Feb 88)";
  278. --- 2,5 ----
  279.    * Provide the version number of this release.
  280.    */
  281.   
  282. ! char    nntp_version[] = "1.5.3 (18 Sep 88)";
  283.