![](https://seccdn.libravatar.org/avatar/128a7b98d536a9cf9b4d4d5a90d63475.jpg?s=120&d=mm&r=g)
Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package apache2-mod_authn_otp for openSUSE:Factory checked in at 2024-07-02 18:19:20 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/apache2-mod_authn_otp (Old) and /work/SRC/openSUSE:Factory/.apache2-mod_authn_otp.new.18349 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "apache2-mod_authn_otp" Tue Jul 2 18:19:20 2024 rev:14 rq:1184837 version:1.1.11 Changes: -------- --- /work/SRC/openSUSE:Factory/apache2-mod_authn_otp/apache2-mod_authn_otp.changes 2024-06-20 16:49:15.177962823 +0200 +++ /work/SRC/openSUSE:Factory/.apache2-mod_authn_otp.new.18349/apache2-mod_authn_otp.changes 2024-07-02 18:19:25.817963186 +0200 @@ -1,0 +2,7 @@ +Thu Jun 27 14:21:35 UTC 2024 - Archie Cobbs <archie.cobbs@gmail.com> + +- Update to version 1.1.11 + - Fixed build issue with libapr on some systems (issue #48) + - Added otplock(1) utility (issue #38) + +------------------------------------------------------------------- Old: ---- mod_authn_otp-1.1.10.tar.gz New: ---- mod_authn_otp-1.1.11.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ apache2-mod_authn_otp.spec ++++++ --- /var/tmp/diff_new_pack.UmU3ek/_old 2024-07-02 18:19:26.813999629 +0200 +++ /var/tmp/diff_new_pack.UmU3ek/_new 2024-07-02 18:19:26.817999776 +0200 @@ -1,5 +1,5 @@ # -# spec file for package apache2-mod_authn_otp +# spec file # # Copyright (c) 2024 SUSE LLC # Copyright (c) 2012 Archie L. Cobbs <archie@dellroad.org> @@ -19,7 +19,7 @@ %define mod_name mod_authn_otp Name: apache2-%{mod_name} -Version: 1.1.10 +Version: 1.1.11 Release: 0 Summary: Apache module for one-time password authentication License: Apache-2.0 @@ -31,6 +31,8 @@ BuildRequires: pkgconfig(openssl) Requires: %{apache_mmn} Requires: %{apache_suse_maintenance_mmn} +Provides: genotpurl = %{version} +Provides: otplock = %{version} Provides: otptool = %{version} %description @@ -56,10 +58,11 @@ yet also don't require users to install special VPN software, and is compatible with software tokens that run on cell phones. -Also included are two command line utilities, otptool and genotpurl. -otptool is a one-time password command line utility. It can be used -on a simple call-out basis to integrate two-factor authentication -into any existing authentication solution. genotpurl generates URLs +Also included are three command line utilities, otptool, otplock, and +genotpurl. otptool is a one-time password command line utility. It can +be used on a simple call-out basis to integrate two-factor authentication +into any existing authentication solution. otplock allows you to safely +modify the users file while Apache is running. genotpurl generates URLs for the Google Authenticator app. %prep @@ -78,7 +81,9 @@ %doc CHANGES README users.sample %{apache_libexecdir}/%{mod_name}.so %{_bindir}/otptool +%{_bindir}/otplock %{_bindir}/genotpurl %{_mandir}/man1/otptool.1.gz +%{_mandir}/man1/otplock.1.gz %{_mandir}/man1/genotpurl.1.gz ++++++ mod_authn_otp-1.1.10.tar.gz -> mod_authn_otp-1.1.11.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mod_authn_otp-1.1.10/CHANGES new/mod_authn_otp-1.1.11/CHANGES --- old/mod_authn_otp-1.1.10/CHANGES 2022-05-04 16:50:52.000000000 +0200 +++ new/mod_authn_otp-1.1.11/CHANGES 2024-06-27 16:13:49.000000000 +0200 @@ -1,3 +1,8 @@ +Version 1.1.11 released June 27, 2024 + + - Fixed build issue with libapr on some systems (issue #48) + - Added otplock(1) utility (issue #38) + Version 1.1.10 released May 4, 2022 - Fixed bug in genotpurl on platforms with signed "char" (pr #46) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mod_authn_otp-1.1.10/Makefile.am new/mod_authn_otp-1.1.11/Makefile.am --- old/mod_authn_otp-1.1.10/Makefile.am 2019-06-22 20:04:49.000000000 +0200 +++ new/mod_authn_otp-1.1.11/Makefile.am 2023-01-07 18:49:27.000000000 +0100 @@ -2,7 +2,7 @@ # # mod_authn_otp - Apache module for one-time password authentication # -# Copyright 2009 Archie L. Cobbs <archie@dellroad.org> +# Copyright 2009 Archie L. Cobbs <archie.cobbs@gmail.com> # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -30,19 +30,21 @@ install-exec-hook: test -z "$(STRIP)" || $(STRIP) $(DESTDIR)`$(APXS) -q LIBEXECDIR`/mod_authn_otp.so test -z "$(STRIP)" || $(STRIP) $(DESTDIR)$(bindir)/otptool + test -z "$(STRIP)" || $(STRIP) $(DESTDIR)$(bindir)/otplock test -z "$(STRIP)" || $(STRIP) $(DESTDIR)$(bindir)/genotpurl -bin_PROGRAMS= otptool genotpurl +bin_PROGRAMS= otptool otplock genotpurl -noinst_HEADERS= otptool.h errinc.h base32.h +noinst_HEADERS= otptool.h otplock.h errinc.h base32.h -man_MANS= otptool.1 genotpurl.1 +man_MANS= otptool.1 otplock.1 genotpurl.1 otptool_SOURCES= otptool.c hotp.c motp.c phex.c +otplock_SOURCES= otplock.c + genotpurl_SOURCES= genotpurl.c base32.c CLEANFILES= *.la *.lo *.o *.so *.slo .libs/* -EXTRA_DIST= CHANGES LICENSE mod_authn_otp.c genotpurl.c users.sample otptool.1 genotpurl.1 base32.c - +EXTRA_DIST= CHANGES LICENSE mod_authn_otp.c genotpurl.c users.sample otptool.1 otplock.1 genotpurl.1 base32.c diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mod_authn_otp-1.1.10/Makefile.in new/mod_authn_otp-1.1.11/Makefile.in --- old/mod_authn_otp-1.1.10/Makefile.in 2022-05-04 16:53:30.000000000 +0200 +++ new/mod_authn_otp-1.1.11/Makefile.in 2024-06-27 16:14:38.000000000 +0200 @@ -17,7 +17,7 @@ # # mod_authn_otp - Apache module for one-time password authentication # -# Copyright 2009 Archie L. Cobbs <archie@dellroad.org> +# Copyright 2009 Archie L. Cobbs <archie.cobbs@gmail.com> # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -105,7 +105,7 @@ NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : -bin_PROGRAMS = otptool$(EXEEXT) genotpurl$(EXEEXT) +bin_PROGRAMS = otptool$(EXEEXT) otplock$(EXEEXT) genotpurl$(EXEEXT) subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac @@ -124,6 +124,9 @@ am_genotpurl_OBJECTS = genotpurl.$(OBJEXT) base32.$(OBJEXT) genotpurl_OBJECTS = $(am_genotpurl_OBJECTS) genotpurl_LDADD = $(LDADD) +am_otplock_OBJECTS = otplock.$(OBJEXT) +otplock_OBJECTS = $(am_otplock_OBJECTS) +otplock_LDADD = $(LDADD) am_otptool_OBJECTS = otptool.$(OBJEXT) hotp.$(OBJEXT) motp.$(OBJEXT) \ phex.$(OBJEXT) otptool_OBJECTS = $(am_otptool_OBJECTS) @@ -156,8 +159,9 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = -SOURCES = $(genotpurl_SOURCES) $(otptool_SOURCES) -DIST_SOURCES = $(genotpurl_SOURCES) $(otptool_SOURCES) +SOURCES = $(genotpurl_SOURCES) $(otplock_SOURCES) $(otptool_SOURCES) +DIST_SOURCES = $(genotpurl_SOURCES) $(otplock_SOURCES) \ + $(otptool_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ @@ -329,12 +333,13 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -noinst_HEADERS = otptool.h errinc.h base32.h -man_MANS = otptool.1 genotpurl.1 +noinst_HEADERS = otptool.h otplock.h errinc.h base32.h +man_MANS = otptool.1 otplock.1 genotpurl.1 otptool_SOURCES = otptool.c hotp.c motp.c phex.c +otplock_SOURCES = otplock.c genotpurl_SOURCES = genotpurl.c base32.c CLEANFILES = *.la *.lo *.o *.so *.slo .libs/* -EXTRA_DIST = CHANGES LICENSE mod_authn_otp.c genotpurl.c users.sample otptool.1 genotpurl.1 base32.c +EXTRA_DIST = CHANGES LICENSE mod_authn_otp.c genotpurl.c users.sample otptool.1 otplock.1 genotpurl.1 base32.c all: config.h $(MAKE) $(AM_MAKEFLAGS) all-am @@ -435,6 +440,10 @@ @rm -f genotpurl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(genotpurl_OBJECTS) $(genotpurl_LDADD) $(LIBS) +otplock$(EXEEXT): $(otplock_OBJECTS) $(otplock_DEPENDENCIES) $(EXTRA_otplock_DEPENDENCIES) + @rm -f otplock$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(otplock_OBJECTS) $(otplock_LDADD) $(LIBS) + otptool$(EXEEXT): $(otptool_OBJECTS) $(otptool_DEPENDENCIES) $(EXTRA_otptool_DEPENDENCIES) @rm -f otptool$(EXEEXT) $(AM_V_CCLD)$(LINK) $(otptool_OBJECTS) $(otptool_LDADD) $(LIBS) @@ -449,6 +458,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/genotpurl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hotp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/motp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/otplock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/otptool.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/phex.Po@am__quote@ @@ -880,6 +890,7 @@ install-exec-hook: test -z "$(STRIP)" || $(STRIP) $(DESTDIR)`$(APXS) -q LIBEXECDIR`/mod_authn_otp.so test -z "$(STRIP)" || $(STRIP) $(DESTDIR)$(bindir)/otptool + test -z "$(STRIP)" || $(STRIP) $(DESTDIR)$(bindir)/otplock test -z "$(STRIP)" || $(STRIP) $(DESTDIR)$(bindir)/genotpurl # Tell versions [3.59,3.63) of GNU make to not export all variables. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mod_authn_otp-1.1.10/aclocal.m4 new/mod_authn_otp-1.1.11/aclocal.m4 --- old/mod_authn_otp-1.1.10/aclocal.m4 2022-05-04 16:53:30.000000000 +0200 +++ new/mod_authn_otp-1.1.11/aclocal.m4 2024-06-27 16:14:38.000000000 +0200 @@ -734,35 +734,6 @@ fi ]) -# -*- Autoconf -*- -# Obsolete and "removed" macros, that must however still report explicit -# error messages when used, to smooth transition. -# -# Copyright (C) 1996-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -AC_DEFUN([AM_CONFIG_HEADER], -[AC_DIAGNOSE([obsolete], -['$0': this macro is obsolete. -You should use the 'AC][_CONFIG_HEADERS' macro instead.])dnl -AC_CONFIG_HEADERS($@)]) - -AC_DEFUN([AM_PROG_CC_STDC], -[AC_PROG_CC -am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc -AC_DIAGNOSE([obsolete], -['$0': this macro is obsolete. -You should simply use the 'AC][_PROG_CC' macro instead. -Also, your code should no longer depend upon 'am_cv_prog_cc_stdc', -but upon 'ac_cv_prog_cc_stdc'.])]) - -AC_DEFUN([AM_C_PROTOTYPES], - [AC_FATAL([automatic de-ANSI-fication support has been removed])]) -AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES]) - # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mod_authn_otp-1.1.10/config.h.in new/mod_authn_otp-1.1.11/config.h.in --- old/mod_authn_otp-1.1.10/config.h.in 2022-05-04 16:53:30.000000000 +0200 +++ new/mod_authn_otp-1.1.11/config.h.in 2024-06-27 16:14:38.000000000 +0200 @@ -1,5 +1,11 @@ /* config.h.in. Generated from configure.ac by autoheader. */ +/* Define to 1 if you have the <apr-1.0/apr_file_io.h> header file. */ +#undef HAVE_APR_1_0_APR_FILE_IO_H + +/* Define to 1 if you have the <apr-1/apr_file_io.h> header file. */ +#undef HAVE_APR_1_APR_FILE_IO_H + /* Define to 1 if you have the <ctype.h> header file. */ #undef HAVE_CTYPE_H @@ -12,6 +18,9 @@ /* Define to 1 if you have the <inttypes.h> header file. */ #undef HAVE_INTTYPES_H +/* Define to 1 if you have the `apr-1' library (-lapr-1). */ +#undef HAVE_LIBAPR_1 + /* Define to 1 if you have the `crypto' library (-lcrypto). */ #undef HAVE_LIBCRYPTO diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mod_authn_otp-1.1.10/configure new/mod_authn_otp-1.1.11/configure --- old/mod_authn_otp-1.1.10/configure 2022-05-04 16:53:31.000000000 +0200 +++ new/mod_authn_otp-1.1.11/configure 2024-06-27 16:14:39.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for mod_authn_otp Apache2 authentication module supporting one-time passwords 1.1.10. +# Generated by GNU Autoconf 2.69 for mod_authn_otp Apache2 authentication module supporting one-time passwords 1.1.11. # # Report bugs to <https://github.com/archiecobbs/mod-authn-otp>. # @@ -580,8 +580,8 @@ # Identity of this package. PACKAGE_NAME='mod_authn_otp Apache2 authentication module supporting one-time passwords' PACKAGE_TARNAME='mod_authn_otp' -PACKAGE_VERSION='1.1.10' -PACKAGE_STRING='mod_authn_otp Apache2 authentication module supporting one-time passwords 1.1.10' +PACKAGE_VERSION='1.1.11' +PACKAGE_STRING='mod_authn_otp Apache2 authentication module supporting one-time passwords 1.1.11' PACKAGE_BUGREPORT='https://github.com/archiecobbs/mod-authn-otp' PACKAGE_URL='' @@ -1271,7 +1271,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures mod_authn_otp Apache2 authentication module supporting one-time passwords 1.1.10 to adapt to many kinds of systems. +\`configure' configures mod_authn_otp Apache2 authentication module supporting one-time passwords 1.1.11 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1337,7 +1337,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of mod_authn_otp Apache2 authentication module supporting one-time passwords 1.1.10:";; + short | recursive ) echo "Configuration of mod_authn_otp Apache2 authentication module supporting one-time passwords 1.1.11:";; esac cat <<\_ACEOF @@ -1429,7 +1429,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -mod_authn_otp Apache2 authentication module supporting one-time passwords configure 1.1.10 +mod_authn_otp Apache2 authentication module supporting one-time passwords configure 1.1.11 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1631,48 +1631,6 @@ } # ac_fn_c_try_cpp -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using @@ -1764,6 +1722,48 @@ } # ac_fn_c_check_header_mongrel +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in @@ -1798,7 +1798,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by mod_authn_otp Apache2 authentication module supporting one-time passwords $as_me 1.1.10, which was +It was created by mod_authn_otp Apache2 authentication module supporting one-time passwords $as_me 1.1.11, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2661,7 +2661,7 @@ # Define the identity of the package. PACKAGE='mod_authn_otp' - VERSION='1.1.10' + VERSION='1.1.11' cat >>confdefs.h <<_ACEOF @@ -4056,6 +4056,53 @@ as_fn_error $? "required library libcrypto missing" "$LINENO" 5 fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for apr_file_lock in -lapr-1" >&5 +$as_echo_n "checking for apr_file_lock in -lapr-1... " >&6; } +if ${ac_cv_lib_apr_1_apr_file_lock+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lapr-1 $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char apr_file_lock (); +int +main () +{ +return apr_file_lock (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_apr_1_apr_file_lock=yes +else + ac_cv_lib_apr_1_apr_file_lock=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_apr_1_apr_file_lock" >&5 +$as_echo "$ac_cv_lib_apr_1_apr_file_lock" >&6; } +if test "x$ac_cv_lib_apr_1_apr_file_lock" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBAPR_1 1 +_ACEOF + + LIBS="-lapr-1 $LIBS" + +else + as_fn_error $? "required library libapr missing" "$LINENO" 5 +fi + # Check for optional functions for ac_func in strptime @@ -4495,6 +4542,30 @@ done +for ac_header in apr-1/apr_file_io.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "apr-1/apr_file_io.h" "ac_cv_header_apr_1_apr_file_io_h" "$ac_includes_default" +if test "x$ac_cv_header_apr_1_apr_file_io_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_APR_1_APR_FILE_IO_H 1 +_ACEOF + +fi + +done + +for ac_header in apr-1.0/apr_file_io.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "apr-1.0/apr_file_io.h" "ac_cv_header_apr_1_0_apr_file_io_h" "$ac_includes_default" +if test "x$ac_cv_header_apr_1_0_apr_file_io_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_APR_1_0_APR_FILE_IO_H 1 +_ACEOF + +fi + +done + # Command line flags # Check whether --enable-Werror was given. @@ -4604,6 +4675,7 @@ ac_libobjs= ac_ltlibobjs= +U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' @@ -5039,7 +5111,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by mod_authn_otp Apache2 authentication module supporting one-time passwords $as_me 1.1.10, which was +This file was extended by mod_authn_otp Apache2 authentication module supporting one-time passwords $as_me 1.1.11, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -5105,7 +5177,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -mod_authn_otp Apache2 authentication module supporting one-time passwords config.status 1.1.10 +mod_authn_otp Apache2 authentication module supporting one-time passwords config.status 1.1.11 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mod_authn_otp-1.1.10/configure.ac new/mod_authn_otp-1.1.11/configure.ac --- old/mod_authn_otp-1.1.10/configure.ac 2022-05-04 16:51:08.000000000 +0200 +++ new/mod_authn_otp-1.1.11/configure.ac 2024-06-27 16:13:00.000000000 +0200 @@ -2,7 +2,7 @@ # # mod_authn_otp - Apache module for one-time password authentication # -# Copyright 2009 Archie L. Cobbs <archie@dellroad.org> +# Copyright 2009 Archie L. Cobbs <archie.cobbs@gmail.com> # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ # limitations under the License. # -AC_INIT([mod_authn_otp Apache2 authentication module supporting one-time passwords], [1.1.10], [https://github.com/archiecobbs/mod-authn-otp], [mod_authn_otp]) +AC_INIT([mod_authn_otp Apache2 authentication module supporting one-time passwords], [1.1.11], [https://github.com/archiecobbs/mod-authn-otp], [mod_authn_otp]) AC_CONFIG_AUX_DIR(scripts) AM_INIT_AUTOMAKE dnl AM_MAINTAINER_MODE @@ -51,25 +51,28 @@ # Check for required libraries AC_CHECK_LIB(crypto, EVP_sha1,, [AC_MSG_ERROR([required library libcrypto missing])]) +AC_CHECK_LIB(apr-1, apr_file_lock,, + [AC_MSG_ERROR([required library libapr missing])]) # Check for optional functions AC_CHECK_FUNCS(strptime) # Check for required header files -AC_HEADER_STDC AC_CHECK_HEADERS(ctype.h errno.h openssl/evp.h openssl/hmac.h openssl/md5.h stdio.h string.h time.h unistd.h, [], [AC_MSG_ERROR([required header file '$ac_header' not found])]) AC_CHECK_HEADERS(err.h, [], []) +AC_CHECK_HEADERS(apr-1/apr_file_io.h) +AC_CHECK_HEADERS(apr-1.0/apr_file_io.h) # Command line flags AC_ARG_ENABLE(Werror, - AC_HELP_STRING([--enable-Werror], + AS_HELP_STRING([--enable-Werror], [enable compilation with -Werror flag (default NO)]), [test x"$enableval" = "xyes" && CFLAGS="${CFLAGS} -Werror"]) # Generated files AC_CONFIG_FILES(Makefile) -AM_CONFIG_HEADER(config.h) +AC_CONFIG_HEADERS(config.h) # Go AC_OUTPUT diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mod_authn_otp-1.1.10/errinc.h new/mod_authn_otp-1.1.11/errinc.h --- old/mod_authn_otp-1.1.10/errinc.h 2018-07-22 04:27:53.000000000 +0200 +++ new/mod_authn_otp-1.1.11/errinc.h 2023-01-07 18:43:03.000000000 +0100 @@ -1,6 +1,6 @@ /* - * Copyright 2009 Archie L. Cobbs <archie@dellroad.org> + * Copyright 2009 Archie L. Cobbs <archie.cobbs@gmail.com> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mod_authn_otp-1.1.10/genotpurl.1 new/mod_authn_otp-1.1.11/genotpurl.1 --- old/mod_authn_otp-1.1.10/genotpurl.1 2020-02-22 21:55:37.000000000 +0100 +++ new/mod_authn_otp-1.1.11/genotpurl.1 2023-01-07 18:43:03.000000000 +0100 @@ -2,7 +2,7 @@ .\" .\" genotpurl - Generate Google Authenticator URLs .\" -.\" Copyright 2009 Archie L. Cobbs <archie@dellroad.org> +.\" Copyright 2009 Archie L. Cobbs <archie.cobbs@gmail.com> .\" .\" Licensed under the Apache License, Version 2.0 (the "License"); .\" you may not use this file except in compliance with the License. @@ -38,8 +38,8 @@ .Nm is a utility for generating URLs for the Google Authenticator cell phone app, which generates one-time passwords compatible with the HOTP/OATH algorithm defined by RFC 4226. -When such and URL is clicked on a cell phone, the token is automatically installed -into the Google Authenticator app. This is a convenient way to deploy such tokens. +When an URL is processed by the Google Authenticator app, the corresponding secure token +is automatically installed into the app. .Pp The .Ar issuer @@ -54,7 +54,9 @@ .Ar key is given, .Nm -generates a random key and prints it to standard output. +generates a random key and prints it to standard error; +this key must then be installed into the server application that verifies the one-time passwords +and associated with the user who will be using the secure token. .Pp The .Fl i , @@ -101,7 +103,15 @@ .Fl i is given. .El +.Sh EXAMPLES +.Bk -words +To generate a new secure token and generate the corresponding QR code: +.Pp +genotpurl -I "Acme, Inc" -L user@acme.com | qrencode -s 6 -o qrcode.png +.Ek .Sh SEE ALSO +.Xr qrencode 1 +.Pp .Rs .%T "mod_authn_otp: Apache module for one-time password authentication" .%O "https://github.com/archiecobbs/mod-authn-otp" @@ -115,4 +125,4 @@ .%O "https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en_US" .Re .Sh AUTHOR -.An Archie L. Cobbs Aq archie@dellroad.org +.An Archie L. Cobbs Aq archie.cobbs@gmail.com diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mod_authn_otp-1.1.10/hotp.c new/mod_authn_otp-1.1.11/hotp.c --- old/mod_authn_otp-1.1.10/hotp.c 2018-05-25 22:52:53.000000000 +0200 +++ new/mod_authn_otp-1.1.11/hotp.c 2023-01-07 18:43:03.000000000 +0100 @@ -2,7 +2,7 @@ /* * otptool - HOTP/OATH one-time password utility * - * Copyright 2009 Archie L. Cobbs <archie@dellroad.org> + * Copyright 2009 Archie L. Cobbs <archie.cobbs@gmail.com> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mod_authn_otp-1.1.10/mod_authn_otp.c new/mod_authn_otp-1.1.11/mod_authn_otp.c --- old/mod_authn_otp-1.1.10/mod_authn_otp.c 2018-05-25 22:58:12.000000000 +0200 +++ new/mod_authn_otp-1.1.11/mod_authn_otp.c 2023-01-07 18:43:03.000000000 +0100 @@ -2,7 +2,7 @@ /* * mod_authn_otp - Apache module for one-time password authentication * - * Copyright 2009 Archie L. Cobbs <archie@dellroad.org> + * Copyright 2009 Archie L. Cobbs <archie.cobbs@gmail.com> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mod_authn_otp-1.1.10/motp.c new/mod_authn_otp-1.1.11/motp.c --- old/mod_authn_otp-1.1.10/motp.c 2018-05-25 22:52:53.000000000 +0200 +++ new/mod_authn_otp-1.1.11/motp.c 2023-01-07 18:43:03.000000000 +0100 @@ -2,7 +2,7 @@ /* * otptool - HOTP/OATH one-time password utility * - * Copyright 2009 Archie L. Cobbs <archie@dellroad.org> + * Copyright 2009 Archie L. Cobbs <archie.cobbs@gmail.com> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mod_authn_otp-1.1.10/otplock.1 new/mod_authn_otp-1.1.11/otplock.1 --- old/mod_authn_otp-1.1.10/otplock.1 1970-01-01 01:00:00.000000000 +0100 +++ new/mod_authn_otp-1.1.11/otplock.1 2023-01-07 20:24:52.000000000 +0100 @@ -0,0 +1,110 @@ +.\" -*- nroff -*- +.\" +.\" otplock - Apache mod_authn_otp one-time users file locker +.\" +.\" Copyright 2023 Archie L. Cobbs <archie.cobbs@gmail.com> +.\" +.\" Licensed under the Apache License, Version 2.0 (the "License"); +.\" you may not use this file except in compliance with the License. +.\" You may obtain a copy of the License at +.\" +.\" http://www.apache.org/licenses/LICENSE-2.0 +.\" +.\" Unless required by applicable law or agreed to in writing, software +.\" distributed under the License is distributed on an "AS IS" BASIS, +.\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.\" See the License for the specific language governing permissions and +.\" limitations under the License. +.\"/ +.Dd January 7, 2023 +.Dt OTPLOCK 1 +.Os +.Sh NAME +.Nm otplock +.Nd Apache mod_authn_otp one-time users file locker +.Sh SYNOPSIS +.Nm otplock +.Bk -words +.Ar usersfile +.Op command ... +.Ek +.Pp +.Nm otplock +.Fl e +.Ar usersfile +.Pp +.Nm otplock +.Fl h +.Sh DESCRIPTION +.Nm +is a utility for safely accessing the +.Ar mod_authn_otp +users file while the Apache server is running. +.Pp +Because the users file is dynamically read and updated during normal server operation, +it's not safe to simultaneously view or edit the file in a separate process without locking it first. +.Pp +This utility implements the same locking protocol as the +.Ar mod_authn_otp +module. +It holds the exclusive lock while the given +.Ar command +executes. +This means that long as +.Ar command +executes, all server requests that require +.Ar mod_authn_otp +for authentication will be temporarily suspended, so command execution should be as brief as possible. +.Pp +If no +.Ar command +is given, +.Nm +simply waits until a lock can be obtained and then exits. +.Sh OPTIONS +.Bl -tag -width Ds +.It Fl e +Invoke +.Ar $EDITOR +with the given +.Ar usersfile . +.Pp +If no +.Ar $EDITOR +environment variable is defined, +.Xr vim 1 +is used. +.It Fl h +Print the usage message and exit successfully. +.El +.Sh RETURN VALUE +.Nm +exits with one of the following return values: +.Bl -tag -width xxx +.It 0 +The users file was successfully locked, and either no +.Ar command +was given, or the command exited normally. +.It N +The given +.Ar command +executed but exited with non-zero exit value +.Ar N . +.It 85 +.Nm +was invoked with invalid command line flags or parameters. +.It 86 +A system error occurred while either locking the file or launching +.Ar command . +.It 87 +The given +.Ar command +executed but terminated by catching a signal. +.El +.Sh SEE ALSO +.Rs +.%T "mod_authn_otp: Apache module for one-time password authentication" +.%O "https://github.com/archiecobbs/mod-authn-otp" +.Re +.Sh AUTHOR +.An Archie L. Cobbs Aq archie.cobbs@gmail.com diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mod_authn_otp-1.1.10/otplock.c new/mod_authn_otp-1.1.11/otplock.c --- old/mod_authn_otp-1.1.10/otplock.c 1970-01-01 01:00:00.000000000 +0100 +++ new/mod_authn_otp-1.1.11/otplock.c 2024-06-27 16:01:03.000000000 +0200 @@ -0,0 +1,202 @@ + +/* + * otplock - Apache mod_authn_otp one-time users file locker + * + * Copyright 2023 Archie L. Cobbs <archie.cobbs@gmail.com> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "otplock.h" +#include "config.h" + +#if HAVE_APR_1_APR_FILE_IO_H +#include <apr-1/apr_file_io.h> +#include <apr-1/apr_lib.h> +#include <apr-1/apr_strings.h> +#include <apr-1/apr_thread_proc.h> +#elif HAVE_APR_1_0_APR_FILE_IO_H +#include <apr-1.0/apr_file_io.h> +#include <apr-1.0/apr_lib.h> +#include <apr-1.0/apr_strings.h> +#include <apr-1.0/apr_thread_proc.h> +#else +#error "libapr header files not found" +#endif + +#define LOCKFILE_SUFFIX ".lock" +#define DEFAULT_EDITOR "vim" + +extern const char *const *environ; + +static void usage(void); + +int +main(int argc, const char *const *argv) +{ + char lockfile[APR_PATH_MAX]; + const char *usersfile; + const char *editcmd[3]; + char errbuf[256]; + apr_pool_t *pool; + apr_file_t *handle = NULL; + apr_status_t status; + int edit = 0; + int ch; + int r; + + // Initialize APR + if ((status = apr_app_initialize(&argc, &argv, &environ)) != APR_SUCCESS) { + warnx("%s: %s", "apr_app_initialize", apr_strerror(status, errbuf, sizeof(errbuf))); + r = EXIT_SYSTEM_ERROR; + goto out0; + } + if ((status = apr_pool_create(&pool, NULL)) != APR_SUCCESS) { + warnx("%s: %s", "apr_pool_create", apr_strerror(status, errbuf, sizeof(errbuf))); + r = EXIT_SYSTEM_ERROR; + goto out1; + } + + // Parse command line + while ((ch = getopt(argc, (char **)(intptr_t)argv, "eh")) != -1) { + switch (ch) { + case 'e': + edit = 1; + break; + case 'h': + usage(); + r = 0; + goto out2; + default: + usage(); + r = EXIT_USAGE_ERROR; + goto out2; + } + } + argc -= optind; + argv += optind; + switch (argc) { + case 0: + usage(); + r = EXIT_USAGE_ERROR; + goto out2; + default: + argc--; + usersfile = *argv++; + break; + } + + // Handle "-e" flag + if (edit) { + const char *const *ev; + + if (argc > 0) { + r = EXIT_USAGE_ERROR; + goto out2; + } + editcmd[0] = DEFAULT_EDITOR; + for (ev = environ; *ev != NULL; ev++) { + if (strncmp(*ev, "EDITOR=", 7) == 0) { + editcmd[0] = *ev + 7; + break; + } + } + editcmd[1] = usersfile; + editcmd[2] = NULL; + argv = editcmd; + argc = 2; + } + + // Open the lock file + apr_snprintf(lockfile, sizeof(lockfile), "%s%s", usersfile, LOCKFILE_SUFFIX); + if ((status = apr_file_open(&handle, lockfile, APR_WRITE|APR_CREATE|APR_TRUNCATE, APR_UREAD|APR_UWRITE, pool)) != APR_SUCCESS) { + warnx("can't open \"%s\": %s", lockfile, apr_strerror(status, errbuf, sizeof(errbuf))); + r = EXIT_SYSTEM_ERROR; + goto out2; + } + + // Lock the lock file + if ((status = apr_file_lock(handle, APR_FLOCK_EXCLUSIVE)) != APR_SUCCESS) { + warnx("can't lock \"%s\": %s", lockfile, apr_strerror(status, errbuf, sizeof(errbuf))); + r = EXIT_SYSTEM_ERROR; + goto out3; + } + + // Execute command, if any + if (*argv != NULL) { + apr_procattr_t *pattr; + apr_exit_why_e why; + apr_proc_t proc; + int rval; + + if ((status = apr_procattr_create(&pattr, pool)) != APR_SUCCESS) { + warnx("%s: %s", "apr_procattr_create", apr_strerror(status, errbuf, sizeof(errbuf))); + r = EXIT_SYSTEM_ERROR; + goto out4; + } + if ((status = apr_procattr_cmdtype_set(pattr, APR_SHELLCMD_ENV)) != APR_SUCCESS) { + warnx("%s: %s", "apr_procattr_cmdtype_set", apr_strerror(status, errbuf, sizeof(errbuf))); + r = EXIT_SYSTEM_ERROR; + goto out4; + } + if ((status = apr_proc_create(&proc, *argv, argv, environ, pattr, pool)) != APR_SUCCESS) { + warnx("%s: %s", "apr_proc_create", apr_strerror(status, errbuf, sizeof(errbuf))); + r = EXIT_SYSTEM_ERROR; + goto out4; + } + if ((status = apr_proc_wait(&proc, &rval, &why, APR_WAIT)) != APR_CHILD_DONE) { + warnx("%s: %s", "apr_proc_wait", apr_strerror(status, errbuf, sizeof(errbuf))); + r = EXIT_SYSTEM_ERROR; + goto out4; + } + switch (why) { + case APR_PROC_EXIT: + if ((r = rval) == APR_ENOTIMPL) + r = 0; + break; + case APR_PROC_SIGNAL: + case APR_PROC_SIGNAL_CORE: + r = EXIT_CAUGHT_SIGNAL; + break; + default: + warnx("%s: %s", "apr_proc_wait", "unknown 'why' code"); + r = EXIT_SYSTEM_ERROR; + break; + } + } else + r = 0; + + // Clean up and exit +out4: + apr_file_unlock(handle); +out3: + apr_file_close(handle); +out2: + apr_pool_destroy(pool); +out1: + apr_terminate(); +out0: + return r; +} + +static void +usage() +{ + fprintf(stderr, "Usage:\n"); + fprintf(stderr, " %s usersfile [ command ... ]\n", PROG_NAME); + fprintf(stderr, " %s -e usersfile\n", PROG_NAME); + fprintf(stderr, " %s -h\n", PROG_NAME); + fprintf(stderr, "Options:\n"); + fprintf(stderr, " -e\tInvoke $EDITOR with usersfile\n"); + fprintf(stderr, " -h\tDisplay this usage message\n"); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mod_authn_otp-1.1.10/otplock.h new/mod_authn_otp-1.1.11/otplock.h --- old/mod_authn_otp-1.1.10/otplock.h 1970-01-01 01:00:00.000000000 +0100 +++ new/mod_authn_otp-1.1.11/otplock.h 2023-01-07 19:41:28.000000000 +0100 @@ -0,0 +1,38 @@ + +/* + * otplock - Apache mod_authn_otp one-time users file locker + * + * Copyright 2023 Archie L. Cobbs <archie.cobbs@gmail.com> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <sys/types.h> + +#include <ctype.h> +#include <errno.h> +#include <stdio.h> +#include <stdint.h> +#include <string.h> +#include <time.h> +#include <unistd.h> + +#include "errinc.h" + +/* Program name */ +#define PROG_NAME "otplock" + +/* Error exit values */ +#define EXIT_USAGE_ERROR 85 /* Incorrect command line usage */ +#define EXIT_SYSTEM_ERROR 86 /* Could not open file, etc. */ +#define EXIT_CAUGHT_SIGNAL 87 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mod_authn_otp-1.1.10/otptool.1 new/mod_authn_otp-1.1.11/otptool.1 --- old/mod_authn_otp-1.1.10/otptool.1 2018-07-27 15:55:01.000000000 +0200 +++ new/mod_authn_otp-1.1.11/otptool.1 2023-01-07 18:43:03.000000000 +0100 @@ -2,7 +2,7 @@ .\" .\" otptool - HOTP/OATH one-time password utility .\" -.\" Copyright 2009 Archie L. Cobbs <archie@dellroad.org> +.\" Copyright 2009 Archie L. Cobbs <archie.cobbs@gmail.com> .\" .\" Licensed under the Apache License, Version 2.0 (the "License"); .\" you may not use this file except in compliance with the License. @@ -177,4 +177,4 @@ .%O "http://motp.sourceforge.net/" .Re .Sh AUTHOR -.An Archie L. Cobbs Aq archie@dellroad.org +.An Archie L. Cobbs Aq archie.cobbs@gmail.com diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mod_authn_otp-1.1.10/otptool.c new/mod_authn_otp-1.1.11/otptool.c --- old/mod_authn_otp-1.1.10/otptool.c 2018-07-27 15:57:13.000000000 +0200 +++ new/mod_authn_otp-1.1.11/otptool.c 2023-01-07 18:43:03.000000000 +0100 @@ -2,7 +2,7 @@ /* * otptool - HOTP/OATH one-time password utility * - * Copyright 2009 Archie L. Cobbs <archie@dellroad.org> + * Copyright 2009 Archie L. Cobbs <archie.cobbs@gmail.com> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mod_authn_otp-1.1.10/otptool.h new/mod_authn_otp-1.1.11/otptool.h --- old/mod_authn_otp-1.1.10/otptool.h 2018-07-22 04:26:56.000000000 +0200 +++ new/mod_authn_otp-1.1.11/otptool.h 2023-01-07 18:43:03.000000000 +0100 @@ -2,7 +2,7 @@ /* * otptool - HOTP/OATH one-time password utility * - * Copyright 2009 Archie L. Cobbs <archie@dellroad.org> + * Copyright 2009 Archie L. Cobbs <archie.cobbs@gmail.com> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mod_authn_otp-1.1.10/phex.c new/mod_authn_otp-1.1.11/phex.c --- old/mod_authn_otp-1.1.10/phex.c 2018-05-25 22:52:53.000000000 +0200 +++ new/mod_authn_otp-1.1.11/phex.c 2023-01-07 18:43:03.000000000 +0100 @@ -2,7 +2,7 @@ /* * otptool - HOTP/OATH one-time password utility * - * Copyright 2009 Archie L. Cobbs <archie@dellroad.org> + * Copyright 2009 Archie L. Cobbs <archie.cobbs@gmail.com> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License.