Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package google-authenticator-libpam for 
openSUSE:Factory checked in at 2026-08-06 16:26:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/google-authenticator-libpam (Old)
 and      /work/SRC/openSUSE:Factory/.google-authenticator-libpam.new.16738 
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "google-authenticator-libpam"

Thu Aug  6 16:26:06 2026 rev:10 rq:1369832 version:1.11

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/google-authenticator-libpam/google-authenticator-libpam.changes
  2025-11-11 19:21:52.940844112 +0100
+++ 
/work/SRC/openSUSE:Factory/.google-authenticator-libpam.new.16738/google-authenticator-libpam.changes
       2026-08-06 16:28:22.125335189 +0200
@@ -1,0 +2,14 @@
+Wed Aug  5 16:46:18 UTC 2026 - Dominique Leuenberger <[email protected]>
+
+- Update to version 1.11:
+  * Change secret key bits to be 160 instead of 128 bits.
+  * Add support for black & white terminals (#268 / #270).
+  * Fix `grace_period` for IPv6 link-local addresses (#265).
+  * Fix potential memory leaks and malloc failure logging.
+- Clean up spec file using spec-cleaner:
+  * Use %make_build, %make_install, and modern
+    %make_build test macros.
+  * Convert libselinux-devel to pkgconfig(libselinux).
+  * Remove redundant BuildRoot and %defattr tags.
+
+-------------------------------------------------------------------

Old:
----
  google-authenticator-libpam-1.10.obscpio

New:
----
  google-authenticator-libpam-1.11.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ google-authenticator-libpam.spec ++++++
--- /var/tmp/diff_new_pack.OVsUZc/_old  2026-08-06 16:28:24.501417191 +0200
+++ /var/tmp/diff_new_pack.OVsUZc/_new  2026-08-06 16:28:24.505417330 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package google-authenticator-libpam
 #
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,11 +17,10 @@
 
 
 Name:           google-authenticator-libpam
-Version:        1.10
+Version:        1.11
 Release:        0
 Summary:        Google Authenticator PAM module
 License:        Apache-2.0
-Group:          Productivity/Security
 URL:            https://github.com/google/google-authenticator-libpam
 Source:         %{name}-%{version}.tar.xz
 Source99:       baselibs.conf
@@ -31,15 +30,14 @@
 Patch3:         267cbfa31bc17805c4850afd39788d97a7b5374c.patch
 Patch4:         6313ae4c2b475e1b73fd272434089cfc4631e14d.patch
 Patch5:         665012cf90acadac882db4738b21b7246965ee2a.patch
-BuildRequires:  libselinux-devel
 BuildRequires:  libtool
 BuildRequires:  pam-devel
+BuildRequires:  pkgconfig
+BuildRequires:  pkgconfig(libselinux)
 # libqrencode.so.[234] are dynamically loaded if present in order to show a QR 
code
 # As the library is not linked, it can't be auto-detected. And as it's not 
mandatory,
 # we recommend it only
 Recommends:     (libqrencode4 or libqrencode3 or libqrencode2)
-BuildRoot:      %{_tmppath}/%{name}-%{version}-build
-
 Provides:       pam-google-authenticator = %{version}
 Obsoletes:      pam-google-authenticator < %{version}
 
@@ -60,17 +58,16 @@
 %configure \
     --docdir=%{_docdir}/%{name} \
     --libdir=$(dirname %{_pam_moduledir})
-make %{?_smp_mflags}
+%make_build
 
 %install
-make %{?_smp_mflags} DESTDIR=%{buildroot} install
+%make_install
 find %{buildroot} -type f -name "*.la" -delete -print
 
 %check
-make test
+%make_build test
 
 %files
-%defattr(-,root,root)
 %doc CONTRIBUTING.md README.md totp.html FILEFORMAT
 %license LICENSE
 %{_pam_moduledir}/pam_google_authenticator.so

++++++ _service ++++++
--- /var/tmp/diff_new_pack.OVsUZc/_old  2026-08-06 16:28:24.617421195 +0200
+++ /var/tmp/diff_new_pack.OVsUZc/_new  2026-08-06 16:28:24.629421609 +0200
@@ -4,7 +4,7 @@
     <param name="scm">git</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="changesgenerate">enable</param>
-    <param name="revision">refs/tags/1.10</param>
+    <param name="revision">refs/tags/1.11</param>
   </service>
   <service name="tar" mode="buildtime" />
   <service name="recompress" mode="buildtime">

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.OVsUZc/_old  2026-08-06 16:28:24.717424646 +0200
+++ /var/tmp/diff_new_pack.OVsUZc/_new  2026-08-06 16:28:24.717424646 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/google/google-authenticator-libpam</param>
-              <param 
name="changesrevision">5c8f2a7a719c8ab7baa89795f3aea36260ee8d27</param></service></servicedata>
+              <param 
name="changesrevision">016774b0b75ee8f5e80028998d386de762ba1697</param></service></servicedata>
 (No newline at EOF)
 

++++++ google-authenticator-libpam-1.10.obscpio -> 
google-authenticator-libpam-1.11.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/google-authenticator-libpam-1.10/configure.ac 
new/google-authenticator-libpam-1.11/configure.ac
--- old/google-authenticator-libpam-1.10/configure.ac   2024-04-23 
18:10:41.000000000 +0200
+++ new/google-authenticator-libpam-1.11/configure.ac   2025-02-13 
16:02:48.000000000 +0100
@@ -1,5 +1,5 @@
 AC_PREREQ(2.61)
-AC_INIT(google-authenticator, 1.10, [email protected])
+AC_INIT(google-authenticator, 1.11, [email protected])
 AC_CONFIG_SRCDIR([src/google-authenticator.c])
 AC_CONFIG_AUX_DIR([build])
 AC_CONFIG_MACRO_DIR([build])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-authenticator-libpam-1.10/src/google-authenticator.c 
new/google-authenticator-libpam-1.11/src/google-authenticator.c
--- old/google-authenticator-libpam-1.10/src/google-authenticator.c     
2024-04-23 18:10:41.000000000 +0200
+++ new/google-authenticator-libpam-1.11/src/google-authenticator.c     
2025-02-13 16:02:48.000000000 +0100
@@ -37,7 +37,7 @@
 #include "sha1.h"
 
 #define SECRET                    "/.google_authenticator"
-#define SECRET_BITS               128         // Must be divisible by eight
+#define SECRET_BITS               160         // Must be divisible by eight
 #define VERIFICATION_CODE_MODULUS (1000*1000) // Six digits
 #define SCRATCHCODES              5           // Default number of initial 
scratchcodes
 #define MAX_SCRATCHCODES          10          // Max number of initial 
scratchcodes
@@ -45,7 +45,7 @@
 #define BYTES_PER_SCRATCHCODE     4           // 32bit of randomness is enough
 #define BITS_PER_BASE32_CHAR      5           // Base32 expands space by 8/5
 
-static enum { QR_UNSET=0, QR_NONE, QR_ANSI, QR_UTF8 } qr_mode = QR_UNSET;
+static enum { QR_UNSET=0, QR_NONE, QR_ANSI, QR_ANSI_INVERSE, QR_ANSI_GREY, 
QR_UTF8, QR_UTF8_INVERSE, QR_UTF8_GREY } qr_mode = QR_UNSET;
 
 static int generateCode(const char *key, unsigned long tm) {
   uint8_t challenge[8];
@@ -184,9 +184,9 @@
 }
 
 #define ANSI_RESET        "\x1B[0m"
-#define ANSI_BLACKONGREY  "\x1B[30;47;27m"
-#define ANSI_WHITE        "\x1B[27m"
-#define ANSI_BLACK        "\x1B[7m"
+#define ANSI_BLACKONGREY  "\x1B[30;47m"
+#define ANSI_INVERSEOFF   "\x1B[27m"
+#define ANSI_INVERSE      "\x1B[7m"
 #define UTF8_BOTH         "\xE2\x96\x88"
 #define UTF8_TOPHALF      "\xE2\x96\x80"
 #define UTF8_BOTTOMHALF   "\xE2\x96\x84"
@@ -225,84 +225,92 @@
   }
   QRcode *qrcode = QRcode_encodeString8bit(url, 0, 1);
   const char *ptr = (char *)qrcode->data;
-  // Output QRCode using ANSI colors. Instead of black on white, we
-  // output black on grey, as that works independently of whether the
-  // user runs their terminal in a black on white or white on black color
-  // scheme.
-  // But this requires that we print a border around the entire QR Code.
-  // Otherwise readers won't be able to recognize it.
-  if (qr_mode != QR_UTF8) {
+  // Output QRCode using ANSI inverting codes. There's also an option to
+  // switch to black on grey rather than whatever the current colors are,
+  // as well as inverting the current colors. To make sure readers can
+  // recognize the code, print a 4-width border around it.
+  const int use_inverse_colors = qr_mode == QR_ANSI_INVERSE || qr_mode == 
QR_UTF8_INVERSE;
+  const int use_black_on_grey = qr_mode == QR_ANSI_GREY || qr_mode == 
QR_UTF8_GREY;
+  const char * const color_setup = use_black_on_grey ? ANSI_BLACKONGREY : 
(use_inverse_colors ? ANSI_INVERSE : "");
+  if (qr_mode == QR_ANSI || qr_mode == QR_ANSI_INVERSE || qr_mode == 
QR_ANSI_GREY) {
+    const char * const inverse = use_inverse_colors ? ANSI_INVERSEOFF : 
ANSI_INVERSE;
+    const char * const inverse_off = use_inverse_colors ? ANSI_INVERSE : 
ANSI_INVERSEOFF;
+    fputs(ANSI_RESET, stdout);
     for (int i = 0; i < 2; ++i) {
-      printf(ANSI_BLACKONGREY);
-      for (int x = 0; x < qrcode->width + 4; ++x) printf("  ");
-      puts(ANSI_RESET);
+      fputs(color_setup, stdout);
+      for (int x = 0; x < qrcode->width + 4; ++x) {
+        fputs("  ", stdout);
+      }
+      fputs(ANSI_RESET"\n", stdout);
     }
     for (int y = 0; y < qrcode->width; ++y) {
-      printf(ANSI_BLACKONGREY"    ");
-      int isBlack = 0;
+      fputs(color_setup, stdout);
+      fputs("    ", stdout);
+      int isInverted = 0;
       for (int x = 0; x < qrcode->width; ++x) {
         if (*ptr++ & 1) {
-          if (!isBlack) {
-            printf(ANSI_BLACK);
+          if (!isInverted) {
+            fputs(inverse, stdout);
+            isInverted = 1;
           }
-          isBlack = 1;
         } else {
-          if (isBlack) {
-            printf(ANSI_WHITE);
+          if (isInverted) {
+            fputs(inverse_off, stdout);
+            isInverted = 0;
           }
-          isBlack = 0;
         }
-        printf("  ");
+        fputs("  ", stdout);
       }
-      if (isBlack) {
-        printf(ANSI_WHITE);
+      if (isInverted) {
+        fputs(inverse_off, stdout);
       }
-      puts("    "ANSI_RESET);
+      fputs("    "ANSI_RESET"\n", stdout);
     }
     for (int i = 0; i < 2; ++i) {
-      printf(ANSI_BLACKONGREY);
-      for (int x = 0; x < qrcode->width + 4; ++x) printf("  ");
-      puts(ANSI_RESET);
+      fputs(color_setup, stdout);
+      for (int x = 0; x < qrcode->width + 4; ++x) {
+        fputs("  ", stdout);
+      }
+      fputs(ANSI_RESET"\n", stdout);
     }
   } else {
     // Drawing the QRCode with Unicode block elements is desirable as
-    // it makes the code much smaller, which is often easier to scan.
+    // it makes the display half the size, which is often easier to scan.
     // Unfortunately, many terminal emulators do not display these
     // Unicode characters properly.
-    printf(ANSI_BLACKONGREY);
-    for (int i = 0; i < qrcode->width + 4; ++i) {
-      printf(" ");
+    fputs(ANSI_RESET, stdout);
+    fputs(color_setup, stdout);
+    for (int x = 0; x < qrcode->width + 4; ++x) {
+      fputs(" ", stdout);
     }
-    puts(ANSI_RESET);
+    fputs(ANSI_RESET"\n", stdout);
     for (int y = 0; y < qrcode->width; y += 2) {
-      printf(ANSI_BLACKONGREY"  ");
+      fputs(color_setup, stdout);
+      fputs("  ", stdout);
       for (int x = 0; x < qrcode->width; ++x) {
         const int top = qrcode->data[y*qrcode->width + x] & 1;
-        int bottom = 0;
-        if (y+1 < qrcode->width) {
-          bottom = qrcode->data[(y+1)*qrcode->width + x] & 1;
-        }
+        const int bottom = y + 1 < qrcode->width ? qrcode->data[(y + 1) * 
qrcode->width + x] & 1 : 0;
         if (top) {
           if (bottom) {
-            printf(UTF8_BOTH);
+            fputs(UTF8_BOTH, stdout);
           } else {
-            printf(UTF8_TOPHALF);
+            fputs(UTF8_TOPHALF, stdout);
           }
         } else {
           if (bottom) {
-            printf(UTF8_BOTTOMHALF);
+            fputs(UTF8_BOTTOMHALF, stdout);
           } else {
-            printf(" ");
+            fputs(" ", stdout);
           }
         }
       }
-      puts("  "ANSI_RESET);
+      fputs("  "ANSI_RESET"\n", stdout);
     }
-    printf(ANSI_BLACKONGREY);
-    for (int i = 0; i < qrcode->width + 4; ++i) {
-      printf(" ");
+    fputs(color_setup, stdout);
+    for (int x = 0; x < qrcode->width + 4; ++x) {
+      fputs(" ", stdout);
     }
-    puts(ANSI_RESET);
+    fputs(ANSI_RESET"\n", stdout);
   }
   QRcode_free(qrcode);
   dlclose(qrencode);
@@ -419,7 +427,7 @@
  " -l, --label=<label>            Override the default label in \"otpauth://\" 
URL\n"
  " -i, --issuer=<issuer>          Override the default issuer in 
\"otpauth://\" URL\n"
  " -q, --quiet                    Quiet mode\n"
- " -Q, --qr-mode={NONE,ANSI,UTF8} QRCode output mode\n"
+ " -Q, 
--qr-mode={NONE,ANSI,ANSI_INVERSE,ANSI_GREY,UTF8,UTF8_INVERSE,UTF8_GREY} QRCode 
output mode\n"
  " -r, --rate-limit=N             Limit logins to N per every M seconds\n"
  " -R, --rate-time=M              Limit logins to N per every M seconds\n"
  " -u, --no-rate-limit            Disable rate-limiting\n"
@@ -589,9 +597,17 @@
       }
       if (!strcasecmp(optarg, "none")) {
         qr_mode = QR_NONE;
-      } else if (!strcasecmp(optarg, "ansi")) {
+      } else if (!strcasecmp(optarg, "ANSI_INVERSE") || !strcasecmp(optarg, 
"ANSI-INVERSE")) {
+        qr_mode = QR_ANSI_INVERSE;
+      } else if (!strcasecmp(optarg, "ANSI_GREY") || !strcasecmp(optarg, 
"ANSI-GREY")) {
+        qr_mode = QR_ANSI_GREY;
+      } else if (!strcasecmp(optarg, "ANSI")) {
         qr_mode = QR_ANSI;
-      } else if (!strcasecmp(optarg, "utf8")) {
+      } else if (!strcasecmp(optarg, "UTF8_INVERSE") || !strcasecmp(optarg, 
"UTF8-INVERSE")) {
+        qr_mode = QR_UTF8_INVERSE;
+      } else if (!strcasecmp(optarg, "UTF8_GREY") || !strcasecmp(optarg, 
"UTF8-GREY")) {
+        qr_mode = QR_UTF8_GREY;
+      } else if (!strcasecmp(optarg, "UTF8")) {
         qr_mode = QR_UTF8;
       } else {
         fprintf(stderr, "Invalid qr-mode \"%s\"\n", optarg);
@@ -711,6 +727,9 @@
       _exit(1);
     }
   }
+  if (qr_mode == QR_UNSET) {
+    qr_mode = QR_ANSI; // most universal option
+  }
   idx = -1;
   if (optind != argc) {
     goto err;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/google-authenticator-libpam-1.10/src/pam_google_authenticator.c 
new/google-authenticator-libpam-1.11/src/pam_google_authenticator.c
--- old/google-authenticator-libpam-1.10/src/pam_google_authenticator.c 
2024-04-23 18:10:41.000000000 +0200
+++ new/google-authenticator-libpam-1.11/src/pam_google_authenticator.c 
2025-02-13 16:02:48.000000000 +0100
@@ -1601,7 +1601,7 @@
     // But RHOST can be FQDN, and by RFC1035 that's 255 characters as max.
     char host[256];
     unsigned long when = 0; // Timestamp of current entry.
-    const int scanf_rc = sscanf(line, " %255[0-9a-zA-Z:.-] %lu ", host, &when);
+    const int scanf_rc = sscanf(line, " %255[0-9a-zA-Z:%.-] %lu ", host, 
&when);
     free(line);
 
     if (scanf_rc != 2) {
@@ -1652,12 +1652,10 @@
   const time_t now = get_time();
   const time_t grace = params->grace_period;
   unsigned long when = 0;
-  char match[128];
 
   if (rhost == NULL) {
     return 0;
   }
-  snprintf(match, sizeof match, " %s %%lu ", rhost);
 
   for (int i = 0; i < 10; i++) {
     static char name[] = "LAST0";
@@ -1671,11 +1669,23 @@
     if (!line) {
       continue;
     }
-    if (sscanf(line, match, &when) == 1) {
+
+    char* previous_rhost = malloc((strlen(line) * sizeof(char)) + 1);
+
+    if (previous_rhost == NULL) {
+      log_message(LOG_ERR, pamh, "Out of memory");
+      return 0;
+    }
+
+    if (sscanf(line, "%s %lu", previous_rhost, &when) == 2 && 
strcmp(previous_rhost, rhost) == 0) {
       free(line);
+      free(previous_rhost);
       break;
     }
+
+    when = 0;
     free(line);
+    free(previous_rhost);
   }
 
   if (when == 0) {

++++++ google-authenticator-libpam.obsinfo ++++++
--- /var/tmp/diff_new_pack.OVsUZc/_old  2026-08-06 16:28:25.113438313 +0200
+++ /var/tmp/diff_new_pack.OVsUZc/_new  2026-08-06 16:28:25.121438589 +0200
@@ -1,5 +1,5 @@
 name: google-authenticator-libpam
-version: 1.10
-mtime: 1713888641
-commit: 5c8f2a7a719c8ab7baa89795f3aea36260ee8d27
+version: 1.11
+mtime: 1739458968
+commit: 016774b0b75ee8f5e80028998d386de762ba1697
 

Reply via email to