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