#983717 nn: db.c:

Package:
src:nn
Source:
nn
Submitter:
Bjarni Ingi Gislason
Date:
2021-02-28 19:57:04 UTC
Severity:
normal
Tags:
#983717#5
Date:
2021-02-28 19:52:33 UTC
From:
To:
Dear Maintainer,
 and some arguments to functions

  Add size of an array to the argument list of some functions.

  Use "snprintf()" instead of "sprintf()".

  Add variable "source" for a file name.

  Add some output with information.

  Add variable "count" to count number of groups.

Signed-off-by: Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
---
 db.c | 47 ++++++++++++++++++++++++++++++++---------------
 1 file changed, 32 insertions(+), 15 deletions(-)

diff --git a/db.c b/db.c
index 51ac2e6..2306c71 100644
--- a/db.c
+++ b/db.c
@@ -850,20 +850,20 @@ art_collected(group_header * gh, article_number art_num)

 #ifndef NOV
 char           *
-db_data_path(char *namebuf, group_header * gh, char d_or_x)
+db_data_path(char *namebuf, size_t nnamebuf, group_header * gh, char d_or_x)
 {
     register char  *cp, *np;

     if (db_data_directory != NULL) {

 #ifdef DB_LONG_NAMES
-	sprintf(namebuf, "%s/%s.%c", db_data_directory, gh->group_name, d_or_x);
+	snprintf(namebuf, nnamebuf, "%s/%s.%c", db_data_directory, gh->group_name, d_or_x);
 #else
 	if (db_data_subdirs)
-	    sprintf(namebuf, "%s/%ld/%ld.%c", db_data_directory,
+	    snprintf(namebuf, nnamebuf, "%s/%ld/%ld.%c", db_data_directory,
 		    gh->group_num / 100, gh->group_num, d_or_x);
 	else
-	    sprintf(namebuf, "%s/%ld.%c", db_data_directory, gh->group_num, d_or_x);
+	    snprintf(namebuf, nnamebuf, "%s/%ld.%c", db_data_directory, gh->group_num, d_or_x);
 #endif				/* DB_LONG_NAMES */
     } else {
 	np = namebuf;
@@ -892,7 +892,7 @@ open_data_file(group_header * gh, char d_or_x, int mode)
     FILE           *f;
     char            data_file[FILENAME];

-    db_data_path(data_file, gh, d_or_x);
+    db_data_path(data_file, FILENAME, gh, d_or_x);

     if (mode == -1) {
 	if (unlink(data_file) < 0 && errno != ENOTDIR && errno != ENOENT)
@@ -1009,6 +1009,7 @@ err:


 #ifdef NOV
+
 static void
 readactfile(void)
 {
@@ -1029,13 +1030,16 @@ readactfile(void)
 #ifdef NNTP
     if (use_nntp) {
 	actfp = nntp_fopen_list("LIST");
-    } else
+	source = nntp_server;
+    } else {
 #endif				/* NNTP */

-	actfp = fopen(relative(news_lib_directory, "active"), "r");
+	source = relative(news_lib_directory, "active");
+	actfp = fopen(source, "r");
+    }

     if (actfp == NULL) {
-	nn_exitmsg(1, "could not fetch active file\n");
+	nn_exitmsg(1, "could not fetch active file from %s\n", source);
     }

     /*
@@ -1068,10 +1072,12 @@ readactfile(void)
 	if ( (nntp_debug || keep_active_file) && (f_user != NULL))
 	    fprintf(f_user, "%s\n", actline);

-	stlist_t       *stnew = (stlist_t *) strkeep(actline, sizeof(stlisthdr_t), POOL_ACT);
+	stlist_t  *stnew = (stlist_t *) strkeep(actline, sizeof(stlisthdr_t), POOL_ACT);
+
 	if (stnew == NULL) {
-	    nn_exitmsg(1, "out of mem for active file (at line %d)\n", count + 1);
+	    nn_exitmsg(1, "Out of memory for active file (at line %d)\n", count + 1);
 	}
+
 	if (sthead != NULL) {
 	    stp->n.next = stnew;
 	    stp = stnew;
@@ -1088,6 +1094,7 @@ readactfile(void)

     actlist = (char **) calloc(count + 1, sizeof(char *));
     grplist = (char **) calloc(count + 1, sizeof(char *));
+
     if (grplist == NULL) {
 	nn_exitmsg(1, "can't create active or group list (%d entries)\n",
 		   count + 1);
@@ -1097,6 +1104,7 @@ readactfile(void)
      * Second pass (in core): Put active lines and group names into string
      * arrays.
      */
+
     for (i = 0, stp = sthead; stp && i < count; stp = stp->n.next, i++) {
 	char           *p = strchr(stp->str, ' ');

@@ -1108,13 +1116,13 @@ readactfile(void)
 	}
 	grplist[i] = strkeep(stp->str, 0, POOL_GRP);
     }
+    tprintf("done.  %d groups.\n\n", count);
     actlist[count] = NULL;
     grplist[count] = NULL;

     /* init the master struct */
     clearobj(&master, sizeof(master), 1);
     master.number_of_groups = count;
-
 }


@@ -1186,7 +1194,7 @@ readpartactfile(void)
 /*	    tprintf("%s\n", actline);
 	nn_exitmsg(1, "Testing ask_server\n");
 */
-	stlist_t       *stnew = (stlist_t *) strkeep(actline, sizeof(stlisthdr_t), POOL_ACT);
+	stlist_t *stnew = (stlist_t *) strkeep(actline, sizeof(stlisthdr_t), POOL_ACT);
 	if (stnew == NULL) {
 	    nn_exitmsg(1, "Out of memory for active file (at line %d)\n", count + 1);
 	}
@@ -1381,6 +1389,7 @@ readtimfile(void)
     char            timline[512];
     FILE           *timfp;
     unsigned        hsize;
+    unsigned int    count = 0;

     if (timtbl != NULL)
 	return;
@@ -1405,6 +1414,8 @@ readtimfile(void)

     /* alt.fan.marla-thrift 736668095 netnews@ccc.amdahl.com */

+    tprintf("Reading the \"active.times\" file ... ");
+    fflush(stdout);
 #ifdef NNTP
     while (use_nntp ? nntp_fgets(timline, sizeof timline)
 	   : fgets(timline, sizeof timline, timfp))
@@ -1422,8 +1433,10 @@ readtimfile(void)
 	if (!hashstore(timtbl, line, p)) {
 	    nn_exitmsg(1, "nn: time hashstore failed\n");
 	}
+	count++;
     }

+    tprintf("done. %u groups.\n", count);
     if (!use_nntp)
 	(void) fclose(timfp);

@@ -1662,6 +1675,7 @@ db_init_active(register group_header * gh)
     register char  *p;

     p = actlist[gh->group_num];
+/* p contains "high low {"y", "m" or "=<group name>"} and a newline */
     if (p != NULL) {
 	while (isspace(*p))
 	    ++p;
@@ -1672,10 +1686,13 @@ db_init_active(register group_header * gh)
 	gh->first_a_article = atol(++p);
 	p = strchr(p, ' ');
 	if (*++p == '=') {	/* an alias */
+/* remove newline at end of string */
+	    if (*(p + strlen(p) - 1) == NL )
+		*(p + strlen(p) - 1) = NUL;
 	    gh1 = lookup_no_alias(++p);
 	    if (gh1 == NULL) {
-		log_entry('R', "Group %s aliased to unknown group (%s)",
-			  gh->group_name, p);
+		log_entry('R', "%s: Group %s aliased to unknown group (%s)",
+			  __FILE__, gh->group_name, p);
 		/* ah well! leave it be */
 	    } else {
 		gh->master_flag |= M_ALIASED;
@@ -2056,7 +2073,7 @@ db_write_offset(FILE * f, long *offset)
 #ifdef NOV
 /* These are strictly temporary.  They will go away. */
 char           *
-db_data_path(char *namebuf, group_header * gh, char d_or_x)
+db_data_path(char *namebuf, size_t nnamebuf, group_header * gh, char d_or_x)
 {
     nn_exitmsg(50, "STUB ROUTINE CALLED: db_data_path\n");
     return NULL;