[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1035672: unblock: inn2/2.7.1-1



Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock
X-Debbugs-Cc: inn2@packages.debian.org
Control: affects -1 + src:inn2

Please unblock package inn2

This is the diff betwwen 2.7.1 RC1 and 2.7.1.
It contains many documentation fixes, small fixes to pullnews and 
a significant for ovsqlite-util.
It also adds a versioned Breaks on manpages-dev which fixes the RC bug 
#1035098.

The 2.7.1 package is being used in production on one of my news servers.

Follows the git diff between debian/2.7.1_20230322-1 and debian/2.7.1-1,
abridged of whitespace and documentation changes.
The full changelog can be consulted at
https://salsa.debian.org/md/inn2/-/commits/master .

The package has a fairly decent autopkgtest but it currently cannot work 
on the Debian infrastructure, because the workers do not have valid 
hostnames. I will find a solution after the release, so please bear with 
me once more. :-)


unblock inn2/2.7.1-1



diff --git a/Makefile.global.in b/Makefile.global.in
index db42dee2e..3a84f23e7 100644
--- a/Makefile.global.in
+++ b/Makefile.global.in
@@ -20,7 +20,7 @@
 ##      be complying with the NNTP protocol.
 
 VERSION		= 2.7.1
-VERSION_EXTRA	= rc1 version
+VERSION_EXTRA	=
 
 ##  The absolute path to the top of the build directory, used to find the
 ##  libraries built as part of INN.  Using relative paths confuses libtool
diff --git a/backends/news2mail.in b/backends/news2mail.in
index bef6ca86a..952cf4610 100644
--- a/backends/news2mail.in
+++ b/backends/news2mail.in
@@ -104,9 +104,15 @@ sub mailto {
     my ($t, $s, @a) = @_;
 
     my $sendmail = $INN::Config::mta;
+    # Remove %s and -f from the mta command line (we'll explicitly set
+    # recipients and an envelope sender below).
+    # Remove -oem as we'll set -oee so that sendmail exits with a
+    # non-zero status only if the mail cannot be sent.
     $sendmail =~ s!\s*%s!!;
+    $sendmail =~ s!(^|\s+)-f\s*\S*!!;
+    $sendmail =~ s!(^|\s+)-oem!!;
     my @command = (
-        split(' ', $sendmail), '-ee', '-odq', "-f$s",
+        split(' ', $sendmail), '-oee', '-odq', "-f$s",
         "-pNNTP:$INN::Config::pathhost", @a
     );
 
diff --git a/debian/changelog b/debian/changelog
index eff319e64..eeaf10caa 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+inn2 (2.7.1-1) unstable; urgency=medium
+
+  * New upstream release.
+  * Breaks manpages-dev << 6.03-2 to make upgrades smoother, because of
+    file(3) and list(3) removed from inn2-dev 2.6.5-1. (Closes: #1035098)
+
+ -- Marco d'Itri <md@linux.it>  Mon, 01 May 2023 19:25:42 +0200
+
 inn2 (2.7.1~20230322-1) unstable; urgency=medium
 
   * New release candidate 1 of the stable branch.
diff --git a/debian/control b/debian/control
index 93d37618c..8d7089372 100644
--- a/debian/control
+++ b/debian/control
@@ -63,6 +63,7 @@ Package: inn2-dev
 Section: devel
 Architecture: any
 Depends: ${misc:Depends}
+Breaks: manpages-dev (<< 6.03-2)
 Conflicts: inn
 Description: libinn.a library, headers and man pages
  You will only need this if you are going to compile programs that
diff --git a/frontends/pullnews.in b/frontends/pullnews.in
index b21ce29b4..0d8809cec 100644
--- a/frontends/pullnews.in
+++ b/frontends/pullnews.in
@@ -100,6 +100,7 @@ my $defaultRetryTime = 1;
 my $defaultProgressWidth = 50;
 my $defaultMaxArts;
 my $lockfile;
+my $runEndBlock = 0;
 
 # Check whether pullnews is run inside INN.
 my $use_inn_shlock = 0;
@@ -120,6 +121,8 @@ if (not $use_inn_shlock) {
 }
 
 END {
+    return unless $runEndBlock;
+
     # In case we bail out, while holding a lock.
     if ($use_inn_shlock) {
         INN::Utils::Shlock::releaselocks();
@@ -423,7 +426,7 @@ if ($use_inn_shlock) {
     INN::Utils::Shlock::lock($lockfile)
       or die "cannot create lockfile $lockfile\n";
 } else {
-    sysopen(LOCK, "$lockfile", O_RDWR | O_CREAT, 0700)
+    sysopen(LOCK, "$lockfile", O_RDWR | O_CREAT, 0644)
       or die "cannot create lockfile $lockfile: $!\n";
     $oldfh = select;
     select LOCK;
@@ -439,6 +442,9 @@ if ($use_inn_shlock) {
 
     print LOCK "$$\n";
 }
+# Now that a lock file has been created, ensure we release it when this process
+# ends or is stopped.
+$runEndBlock = 1;
 
 print LOG scalar(localtime(time)), " start\n\n" unless $quiet;
 
@@ -554,6 +560,7 @@ if (not $quiet and not $quietness) {
 }
 
 my $connectionAttempts = 0;
+my %groupsStarted = ();
 
 UPSTREAM:
 foreach my $server (@servers) {
@@ -683,6 +690,7 @@ foreach my $server (@servers) {
 } continue {
     # Reinitialize the counter for the next server.
     $connectionAttempts = 0;
+    %groupsStarted = ();
 }
 
 saveConfig();
@@ -768,7 +776,8 @@ sub stats {
 sub saveConfig {
     return if $no_op;
 
-    $SIG{INT} = $SIG{QUIT} = 'IGNORE';
+    local $SIG{INT} = 'IGNORE';
+    local $SIG{QUIT} = 'IGNORE';
 
     open(FILE, ">$groupFile") || die "can't open $groupFile: $!\n";
     my $server;
@@ -846,12 +854,18 @@ sub crossFeedGroup {
         printf LOG "\t%d article%s available (first %d, last %d)\n",
           $narticles, $narticles != 1 ? "s" : "", $first, $last;
     }
-    if (defined $watermark) {
+
+    # Do not set several times the water mark to another value.  Just go on
+    # downloading articles from the last retrieved one when the connection
+    # timed out.
+    if (defined($watermark) and !exists($groupsStarted{$group})) {
         printf LOG "\tOur previous highest: %d\n", $prevHigh if not $quiet;
         $high = $watermark;
         $high = $last + $watermark if substr($watermark, 0, 1) eq '-';
         $high = 0 if $high < 0;
         $shash->{$group} = [time, $high];
+        $prevHigh = $high;
+        $groupsStarted{$group} = 1;
     }
     printf LOG "\tOur current highest: %d", $high if not $quiet;
 
@@ -964,7 +979,7 @@ sub crossFeedGroup {
                     }
                 }
                 $add_bytes_header = 1 if not $has_bytes_header;
-                push @{$article}, "\n" if not $is_control_art;
+                push @{$article}, "\r\n" if not $is_control_art;
             }
         }
 
@@ -1001,7 +1016,7 @@ sub crossFeedGroup {
                 $idx_blank_pre_body = $idx;
 
                 $curr_hdr = lc($1) if $article->[$idx] =~ /^([^:[:blank:]]+):/;
-                if ($article->[$idx] eq "\n") {
+                if ($article->[$idx] eq "\r\n") {
                     $headers = 0;
                     next;
                 }
diff --git a/innd/rc.c b/innd/rc.c
index 6e6f1a127..b65e3a2ab 100644
--- a/innd/rc.c
+++ b/innd/rc.c
@@ -61,7 +61,6 @@ typedef struct _REMOTETABLE {
     time_t Expires;
 } REMOTETABLE;
 
-static char *RCslaveflag;
 static char *RCnnrpd = NULL;
 static char *RCnntpd = NULL;
 static CHANNEL **RCchan;
@@ -424,8 +423,6 @@ RChandoff(int fd, HANDOFF h)
     }
     if (NNRPTracing)
         argv[i++] = "-t";
-    if (RCslaveflag)
-        argv[i++] = RCslaveflag;
 
     for (j = 0; j < flags->count; j++) {
         argv[i++] = flags->strings[j];
diff --git a/lib/setproctitle.c b/lib/setproctitle.c
index fd5e75351..a5a0212ca 100644
--- a/lib/setproctitle.c
+++ b/lib/setproctitle.c
@@ -77,7 +77,8 @@ setproctitle(const char *format, ...)
     title = title_start;
     *title++ = '-';
     *title++ = ' ';
-    length = title_end - title_start - 2;
+    /* Remaining length after initial "- ". */
+    length = (title_end - title_start + 1) - 2;
 
     /* Now, put in the actual content.  Get the program name from
        message_program_name if it's set. */
diff --git a/storage/ovsqlite/ovsqlite-util.in b/storage/ovsqlite/ovsqlite-util.in
index 626949b82..f86b8392e 100644
--- a/storage/ovsqlite/ovsqlite-util.in
+++ b/storage/ovsqlite/ovsqlite-util.in
@@ -346,7 +345,7 @@ insert into repairs
          expired, groupname, flag_alias)
     select groupid,
             new_low, new_low != low as low_was_bad,
-            new_high, new_high != high as high_was_bad,
+            new_high, new_high > high as high_was_bad,
             new_count, new_count != "count" as count_was_bad,
             expired, groupname, flag_alias
         from new_stats
diff --git a/support/getrra-c-util b/support/getrra-c-util
index 84f688614..4ee537f58 100755
--- a/support/getrra-c-util
+++ b/support/getrra-c-util
@@ -40,10 +40,12 @@ download() {
         # Update the path of included C header files.
         # Change "RRA_" to "INN_", "rra_" to "inn_", and "UTIL_" to "INN_"
         # so as to keep a homogeneous naming convention in INN source code.
+        # Also remove the first 2 lines containing an internal serial number.
         # Changes in shell, m4 and C files are not the same.
         if [ "$2" = "m4" ]; then
             sed -i -e 's/RRA_/INN_/g' \
                 -e 's/rra_/inn_/g' \
+                -e '1,2d' \
                 ${TEMP}
 
             # Remove useless function for INN.

The rest is just the test suite:

diff --git a/tests/lib/fakewrite.c b/tests/lib/fakewrite.c
index 1467b1415..2b0a73fa1 100644
--- a/tests/lib/fakewrite.c
+++ b/tests/lib/fakewrite.c
@@ -4,7 +4,7 @@
  * The canonical version of this file is maintained in the rra-c-util package,
  * which can be found at <https://www.eyrie.org/~eagle/software/rra-c-util/>.
  *
- * Copyright 2000-2002, 2004, 2017 Russ Allbery <eagle@eyrie.org>
+ * Copyright 2000-2002, 2004, 2017, 2023 Russ Allbery <eagle@eyrie.org>
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
@@ -64,7 +64,7 @@ bool write_fail = false;
 ssize_t
 fake_write(int fd UNUSED, const void *data, size_t n)
 {
-    size_t total;
+    size_t total, left;
 
     if (write_fail)
         return 0;
@@ -72,9 +72,14 @@ fake_write(int fd UNUSED, const void *data, size_t n)
         errno = EINTR;
         return -1;
     }
-    total = (n < 32) ? n : 32;
-    if (256 - write_offset < total)
-        total = 256 - write_offset;
+    if (write_offset >= sizeof(write_buffer)) {
+        errno = ENOSPC;
+        return 0;
+    }
+    left = sizeof(write_buffer) - write_offset;
+    if (left > 32)
+        left = 32;
+    total = (n < left) ? n : left;
     memcpy(write_buffer + write_offset, data, total);
     write_offset += total;
     return total;
@@ -89,7 +94,7 @@ fake_write(int fd UNUSED, const void *data, size_t n)
 ssize_t
 fake_pwrite(int fd UNUSED, const void *data, size_t n, off_t offset)
 {
-    size_t total;
+    size_t total, left;
 
     if (write_fail)
         return 0;
@@ -97,13 +102,14 @@ fake_pwrite(int fd UNUSED, const void *data, size_t n, off_t offset)
         errno = EINTR;
         return -1;
     }
-    total = (n < 32) ? n : 32;
-    if (offset > 256) {
+    if (offset >= (ssize_t) sizeof(write_buffer)) {
         errno = ENOSPC;
         return -1;
     }
-    if ((size_t) (256 - offset) < total)
-        total = 256 - offset;
+    left = sizeof(write_buffer) - offset;
+    if (left > 32)
+        left = 32;
+    total = (n < left) ? n : left;
     memcpy(write_buffer + offset, data, total);
     return total;
 }
@@ -125,7 +131,7 @@ fake_writev(int fd UNUSED, const struct iovec *iov, int iovcnt)
         errno = EINTR;
         return -1;
     }
-    left = 256 - write_offset;
+    left = sizeof(write_buffer) - write_offset;
     if (left > 32)
         left = 32;
     total = 0;
diff --git a/tests/lib/getnameinfo-t.c b/tests/lib/getnameinfo-t.c
index 93991eeb1..24864fc06 100644
--- a/tests/lib/getnameinfo-t.c
+++ b/tests/lib/getnameinfo-t.c
@@ -5,7 +5,7 @@
  * which can be found at <https://www.eyrie.org/~eagle/software/rra-c-util/>.
  *
  * Written by Russ Allbery <eagle@eyrie.org>
- * Copyright 2005-2006, 2014, 2018, 2022 Russ Allbery <eagle@eyrie.org>
+ * Copyright 2005-2006, 2014, 2018, 2022-2023 Russ Allbery <eagle@eyrie.org>
  * Copyright 2007-2011
  *     The Board of Trustees of the Leland Stanford Junior University
  *
@@ -150,7 +150,8 @@ main(void)
     inet_aton("0.0.0.0", &sin.sin_addr);
     status = test_getnameinfo(sa, sizeof(sin), node, sizeof(node), NULL, 0, 0);
     is_int(0, status, "lookup of 0.0.0.0");
-    hp = gethostbyaddr(sa, sizeof(sin), AF_INET);
+    hp = gethostbyaddr((const void *) &sin.sin_addr, sizeof(sin.sin_addr),
+                       AF_INET);
     if (hp != NULL)
         skip_block(2, "0.0.0.0 resolves to a hostname");
     else {
diff --git a/tests/lib/network/server-t.c b/tests/lib/network/server-t.c
index 9e543efdc..4f30602cd 100644
--- a/tests/lib/network/server-t.c
+++ b/tests/lib/network/server-t.c
@@ -5,7 +5,7 @@
  * which can be found at <https://www.eyrie.org/~eagle/software/rra-c-util/>.
  *
  * Written by Russ Allbery <eagle@eyrie.org>
- * Copyright 2005, 2013, 2016-2018, 2020 Russ Allbery <eagle@eyrie.org>
+ * Copyright 2005, 2013, 2016-2018, 2020, 2023 Russ Allbery <eagle@eyrie.org>
  * Copyright 2009-2013
  *     The Board of Trustees of the Leland Stanford Junior University
  *
@@ -282,10 +282,6 @@ test_server_accept(socket_type fd)
  * come from other addresses.  Hosts that only have IPv6 interfaces will see a
  * client connection on ::1 instead.  Avoid checking if the client IP is
  * 127.0.0.1 for that reason.  Hopefully this won't hide bugs.
- *
- * saddr is allocated from the heap instead of using a local struct
- * sockaddr_storage to work around a misdiagnosis of strict aliasing
- * violations from gcc 4.4 (fixed in later versions).
  */
 static void
 test_server_accept_any(socket_type fds[], unsigned int count)
@@ -298,7 +294,13 @@ test_server_accept_any(socket_type fds[], unsigned int count)
     /* If there are firewalls that block connections, we could hang here. */
     alarm(5);
 
-    /* Accept the connection and writes from the client. */
+    /*
+     * Accept the connection and writes from the client.
+     *
+     * saddr is allocated from the heap instead of using a local struct
+     * sockaddr_storage to work around a misdiagnosis of strict aliasing
+     * violations from gcc 4.4 (fixed in later versions).
+     */
     slen = sizeof(struct sockaddr_storage);
     saddr = bcalloc(1, slen);
     client = network_accept_any(fds, count, saddr, &slen);
@@ -407,7 +409,9 @@ get_sockaddr(socket_type fd)
     size = sizeof(struct sockaddr_storage);
     if (getsockname(fd, saddr, &size) < 0)
         sysbail("cannot getsockname");
-    if (size > sizeof(struct sockaddr)) {
+
+    /* This seems highly unlikely, but handle it anyway. */
+    if (size > sizeof(struct sockaddr_storage)) {
         free(saddr);
         saddr = bmalloc(size);
         if (getsockname(fd, saddr, &size) < 0)
diff --git a/tests/runtests.c b/tests/runtests.c
index 72f4a70d9..3fd55a525 100644
--- a/tests/runtests.c
+++ b/tests/runtests.c
@@ -408,7 +408,7 @@ x_reallocarray(void *p, size_t n, size_t size, const char *file, int line)
     n = (n > 0) ? n : 1;
     size = (size > 0) ? size : 1;
 
-    if (n > 0 && UINT_MAX / n <= size)
+    if (UINT_MAX / n <= size)
         sysdie("realloc too large at %s line %d", file, line);
     p = realloc(p, n * size);
     if (p == NULL)

-- 
ciao,
Marco

Attachment: signature.asc
Description: PGP signature


Reply to: