+# TODO
+# - check and package docs: https://fedorahosted.org/releases/l/i/linux-pam/Linux-PAM-1.1.8-docs.tar.bz2
+# - fix pdf gen or disable it: No fo2pdf processor installed, skip PDF generation
+# - replace pam_cracklib.so with pam_pwquality.so (backwards compatible with its options), comes with pam-pam_pwquality package
+# - pam_tally, pam_tally2 is deprecated in favor of pam_faillock
+# use patch for now: pkgs.fedoraproject.org/pam/pam-1.2.1-faillock.patch
+# https://www.redhat.com/archives/pam-list/2017-June/msg00002.html
#
# Conditional build:
%bcond_without doc # don't build documentation
-%bcond_with prelude # build with Prelude IDS support
+%bcond_with prelude # build with Prelude IDS support (in libpam)
%bcond_without selinux # build without SELinux support
%bcond_without audit # build with Linux Auditing library support
Summary(tr.UTF-8): Modüler, artımsal doğrulama birimleri
Summary(uk.UTF-8): Інструмент, що забезпечує аутентифікацію для програм
Name: pam
-Version: 1.1.5
-Release: 3
+Version: 1.3.0
+Release: 5
Epoch: 1
-License: GPL or BSD
+# The library is BSD licensed with option to relicense as GPLv2+
+# - this option is redundant as the BSD license allows that anyway.
+# pam_timestamp, pam_loginuid, and pam_console modules are GPLv2+.
+License: BSD and GPL v2+
Group: Base
-#Source0: http://ftp.kernel.org/pub/linux/libs/pam/library/Linux-PAM-%{version}.tar.bz2
-Source0: https://fedorahosted.org/releases/l/i/linux-pam/Linux-PAM-%{version}.tar.bz2
-# Source0-md5: 927ee5585bdec5256c75117e9348aa47
-#xSource1: http://ftp.kernel.org/pub/linux/libs/pam/library/Linux-PAM-%{version}.tar.bz2.sign
-# xSource1-md5: 2435d4a23aaf871bcec436f863b0de6c
+Source0: http://www.linux-pam.org/library/Linux-PAM-%{version}.tar.bz2
+# Source0-md5: da4b2289b7cfb19583d54e9eaaef1c3a
+Source1: http://www.linux-pam.org/library/Linux-PAM-%{version}-docs.tar.bz2
+# Source1-md5: 30fa7fa696a5b3b8d2c3c41d9373a8f3
Source2: ftp://ftp.pld-linux.org/software/pam/%{name}-pld-%{pam_pld_version}.tar.gz
# Source2-md5: f9ec6fcafcf1801bf318e60040244f2e
Source3: other.pamd
Source7: system-auth.5
Source8: config-util.5
Source9: %{name}.tmpfiles
+Source10: postlogin.pamd
Patch0: %{name}-pld-modules.patch
-Patch1: %{name}-cracklib-enforce.patch
+Patch1: %{name}_console-lex-static.patch
Patch2: %{name}-tally-fail-close.patch
Patch3: %{name}-mkhomedir-notfound.patch
Patch4: %{name}-db-gdbm.patch
Patch5: %{name}-exec-failok.patch
-URL: http://www.kernel.org/pub/linux/libs/pam/
+Patch6: update-motd.patch
+URL: http://www.linux-pam.org/
%{?with_audit:BuildRequires: audit-libs-devel >= 1.6.9}
BuildRequires: autoconf >= 2.61
BuildRequires: automake
BuildRequires: bison
BuildRequires: cracklib-devel >= 2.8.3
-# gdbm due to db pulling libpthread
BuildRequires: flex
+# gdbm due to db pulling libpthread
BuildRequires: gdbm-devel >= 1.8.3-7
-BuildRequires: gettext-devel >= 0.15
+BuildRequires: gettext-tools >= 0.18.3
BuildRequires: glibc-devel >= 6:2.10.1
-BuildRequires: glibc-misc
%{?with_prelude:BuildRequires: libprelude-devel >= 0.9.0}
-%{?with_selinux:BuildRequires: libselinux-devel >= 1.33.2}
-#BuildRequires: libtirpc-devel
-BuildRequires: libtool >= 2:1.5
+%{?with_selinux:BuildRequires: libselinux-devel >= 2.1.9}
+BuildRequires: libtirpc-devel
+BuildRequires: libtool >= 2:2
BuildRequires: libxcrypt-devel
%{?with_audit:BuildRequires: linux-libc-headers >= 2.6.23.1}
+BuildRequires: pkgconfig
BuildRequires: zlib-devel
%if %{with doc}
BuildRequires: docbook-dtd412-xml
BuildRequires: w3m
%endif
Requires: %{name}-libs = %{epoch}:%{version}-%{release}
-Requires: /usr/bin/make
+%{?with_audit:Requires: audit-libs >= 1.0.8}
Requires: awk
-Provides: pam-pld
+Requires: crypt(blowfish)
+Requires: glibc >= 6:2.5-0.5
+%{?with_selinux:Requires: libselinux >= 2.1.9}
+Requires: pam-pam_cracklib = %{epoch}:%{version}-%{release}
+Suggests: make
+Suggests: pam-pam_pwquality
+Suggests: pam-pam_userdb = %{epoch}:%{version}-%{release}
Obsoletes: pam-doc
+Obsoletes: pam-pam_opie
+Obsoletes: pam-pam_pwdb
+Obsoletes: pam-pam_radius
+Obsoletes: pam-pam_skey
+Obsoletes: pam-pam_tcpd
Obsoletes: pam_make
Obsoletes: pamconfig
Conflicts: dev < 3.4-4
+Conflicts: pam < 0:0.80.1-2
Conflicts: udev < 1:138-5
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
аутентикации в PLD Linux.
%package libs
-Summary: PAM modules and libraries
-Summary(pl.UTF-8): Moduły i biblioteki PAM
+Summary: PAM libraries
+Summary(pl.UTF-8): Moduły PAM
Group: Libraries
Requires(triggerpostun): sed >= 4.0
-%{?with_audit:Requires: audit-libs >= 1.0.8}
-Requires: cracklib >= 2.8.3
-Requires: cracklib-dicts >= 2.8.3
-Requires: crypt(blowfish)
-Requires: gdbm >= 1.8.3-7
-Requires: glibc >= 6:2.5-0.5
-%{?with_selinux:Requires: libselinux >= 1.33.2}
-Obsoletes: pam-pam_opie
-Obsoletes: pam-pam_pwdb
-Obsoletes: pam-pam_radius
-Obsoletes: pam-pam_skey
-Obsoletes: pam-pam_tcpd
-Conflicts: pam < 0:0.80.1-2
%description libs
-Core PAM modules and libraries.
+PAM libraries.
%description libs -l pl.UTF-8
-Moduły i biblioteki PAM.
+Moduły PAM.
%package devel
Summary: PAM header files
Summary(ru.UTF-8): Библиотеки разработчика для PAM
Summary(uk.UTF-8): Бібліотеки програміста для PAM
Group: Development/Libraries
-Requires: %{name} = %{epoch}:%{version}-%{release}
+Requires: %{name}-libs = %{epoch}:%{version}-%{release}
%{?with_audit:Requires: audit-libs-devel >= 1.0.8}
Requires: filesystem >= 3.0-11
%description static -l uk.UTF-8
Цей пакет містить статичні бібліотеки програміста для PAM.
+%package pam_cracklib
+Summary: PAM module to check the password against dictionary words
+Summary(pl.UTF-8): Moduł PAM do sprawdzania haseł względem słów ze słownika
+Group: Base
+Requires: %{name}-libs = %{epoch}:%{version}-%{release}
+Requires: cracklib >= 2.8.3
+Requires: cracklib-dicts >= 2.8.3
+
+%description pam_cracklib
+PAM module to check the password against dictionary words.
+
+%description pam_cracklib -l pl.UTF-8
+Moduł PAM do sprawdzania haseł względem słów ze słownika.
+
%package pam_selinux
Summary: PAM module - SELinux support
Summary(pl.UTF-8): Moduł PAM pozwalający na zmianę kontekstów SELinuksa
Group: Base
+Requires: %{name}-libs = %{epoch}:%{version}-%{release}
+Requires: libselinux >= 2.1.9
%description pam_selinux
PAM module - SELinux support.
%description pam_selinux -l pl.UTF-8
Moduł PAM pozwalający na zmianę kontekstów SELinuksa.
+%package pam_userdb
+Summary: PAM module - authenticate against GDBM database
+Summary(pl.UTF-8): Moduł PAM do uwierzytelniania względem bazy danych GDBM
+Group: Base
+Requires: %{name}-libs = %{epoch}:%{version}-%{release}
+Requires: gdbm >= 1.8.3-7
+
+%description pam_userdb
+pam_userdb - PAM module to authenticate against GDBM database.
+
+%description pam_userdb -l pl.UTF-8
+pam_userdb - moduł PAM służący do uwierzytelniania względem bazy
+danych GDBM.
+
%prep
%setup -q -a2 -n Linux-PAM-%{version}
%patch0 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
+%patch6 -p1
%build
%{__libtoolize}
%{__autoheader}
%{__automake}
%configure \
+ ac_cv_path_FO2PDF= \
--enable-static \
--enable-shared \
--libdir=/%{_lib} \
%install
rm -rf $RPM_BUILD_ROOT
-install -d $RPM_BUILD_ROOT{%{_libdir},/etc/pam.d,/var/log} \
- $RPM_BUILD_ROOT/usr/lib/tmpfiles.d
+install -d $RPM_BUILD_ROOT{%{_libdir},/etc/pam.d,/var/{log,run/sepermit}} \
+ $RPM_BUILD_ROOT%{systemdtmpfilesdir}
%{__make} install \
DESTDIR=$RPM_BUILD_ROOT
%if %{with selinux}
-install modules/pam_selinux/.libs/pam_selinux_check $RPM_BUILD_ROOT%{_sbindir}
-install modules/pam_selinux/pam_selinux_check.8 $RPM_BUILD_ROOT%{_mandir}/man8
-install %{SOURCE6} $RPM_BUILD_ROOT/etc/pam.d/pam_selinux_check
+install -p modules/pam_selinux/.libs/pam_selinux_check $RPM_BUILD_ROOT%{_sbindir}
+cp -p modules/pam_selinux/pam_selinux_check.8 $RPM_BUILD_ROOT%{_mandir}/man8
+cp -p %{SOURCE6} $RPM_BUILD_ROOT/etc/pam.d/pam_selinux_check
%endif
-install %{SOURCE9} $RPM_BUILD_ROOT/usr/lib/tmpfiles.d/%{name}.conf
+cp -p %{SOURCE9} $RPM_BUILD_ROOT%{systemdtmpfilesdir}/%{name}.conf
install -d doc/txts
-for r in modules/pam_*/README ; do
- cp -f $r doc/txts/README.$(basename $(dirname $r))
+for r in modules/pam_*/README; do
+ cp -pf $r doc/txts/README.$(basename $(dirname $r))
done
+%{__rm} doc/txts/README.pam_userdb
+%{__rm} doc/txts/README.pam_cracklib
install -d doc/html
-cp -f doc/index.html doc/html/
+cp -pf doc/index.html doc/html/
# fix PAM/pam man page
echo ".so PAM.8" > $RPM_BUILD_ROOT%{_mandir}/man8/pam.8
:> $RPM_BUILD_ROOT/var/log/tallylog
-mv -f $RPM_BUILD_ROOT/%{_lib}/lib*.a $RPM_BUILD_ROOT%{_libdir}
+%{__mv} $RPM_BUILD_ROOT/%{_lib}/lib*.a $RPM_BUILD_ROOT%{_libdir}
cd $RPM_BUILD_ROOT/%{_lib}
for f in lib*.la ; do
- sed -e 's|/%{_lib}/libpam|%{_libdir}/libpam|g' $f > $RPM_BUILD_ROOT%{_libdir}/$f
- rm -f $f
- sed -i -e "s|libdir='/%{_lib}|libdir='%{_libdir}|g" $RPM_BUILD_ROOT%{_libdir}/$f
+ %{__sed} -e 's|/%{_lib}/libpam|%{_libdir}/libpam|g' \
+ -e "s|libdir='/%{_lib}|libdir='%{_libdir}|g" $f > $RPM_BUILD_ROOT%{_libdir}/$f
+ %{__rm} $f
done
ln -sf /%{_lib}/$(echo libpam.so.*.*.*) $RPM_BUILD_ROOT%{_libdir}/libpam.so
ln -sf /%{_lib}/$(echo libpam_misc.so.*.*.*) $RPM_BUILD_ROOT%{_libdir}/libpam_misc.so
ln -sf /%{_lib}/$(echo libpamc.so.*.*.*) $RPM_BUILD_ROOT%{_libdir}/libpamc.so
cd -
-install %{SOURCE3} $RPM_BUILD_ROOT/etc/pam.d/other
-install %{SOURCE4} $RPM_BUILD_ROOT/etc/pam.d/system-auth
-install %{SOURCE5} $RPM_BUILD_ROOT/etc/pam.d/config-util
+cp -p %{SOURCE3} $RPM_BUILD_ROOT/etc/pam.d/other
+cp -p %{SOURCE4} $RPM_BUILD_ROOT/etc/pam.d/system-auth
+cp -p %{SOURCE5} $RPM_BUILD_ROOT/etc/pam.d/config-util
+cp -p %{SOURCE10} $RPM_BUILD_ROOT/etc/pam.d/postlogin
-install %{SOURCE7} $RPM_BUILD_ROOT%{_mandir}/man5/system-auth.5
-install %{SOURCE8} $RPM_BUILD_ROOT%{_mandir}/man5/config-util.5
+cp -p %{SOURCE7} $RPM_BUILD_ROOT%{_mandir}/man5/system-auth.5
+cp -p %{SOURCE8} $RPM_BUILD_ROOT%{_mandir}/man5/config-util.5
# Make sure every module subdirectory gave us a module. Yes, this is hackish.
for dir in modules/pam_* ; do
done
# useless - shut up check-files
-rm -f $RPM_BUILD_ROOT/%{_lib}/security/*.{la,a}
-rm -f $RPM_BUILD_ROOT/%{_lib}/lib*.so
-rm -rf $RPM_BUILD_ROOT%{_datadir}/doc/Linux-PAM
+%{__rm} $RPM_BUILD_ROOT/%{_lib}/security/*.{la,a}
+%{__rm} $RPM_BUILD_ROOT/%{_lib}/lib*.so
+%{__rm} -r $RPM_BUILD_ROOT%{_docdir}/Linux-PAM
%if %{without selinux}
rm -rf $RPM_BUILD_ROOT{/%{_lib}/security/pam_selinux.so,%{_sbindir}/pam_selinux_check,%{_mandir}/man8/pam_selinux*.8*}
if [ "$1" != 1 ]; then
%service -q crond restart
fi
+exit 0
+
+%triggerpostun -- %{name} < 1:1.1.5-8
+# removed in 1.1.4
+if grep -qs change_uid /etc/pam.d/system-auth; then
+ %{__sed} -i -e '/session/ s/change_uid//' /etc/pam.d/system-auth
+fi
+
+# We want it added for painless upgarde even if it mean log pollution for non-systemd
+# enabled systems,
+# If this module is not present on systemd enabled system then `systemctl restart sshd.service`
+# will kill all sessions.
+if ! grep -qs pam_systemd /etc/pam.d/system-auth; then
+ echo "-session optional pam_systemd.so" >>/etc/pam.d/system-auth
+fi
%post -p <lua>
fh, error = io.open("/var/log/tallylog")
%dir /etc/security/console.apps
%dir /etc/security/console.perms.d
%dir /var/run/console
-/usr/lib/tmpfiles.d/%{name}.conf
+%{systemdtmpfilesdir}/%{name}.conf
%config(noreplace) %verify(not md5 mtime size) /etc/environment
%config(noreplace) %verify(not md5 mtime size) /etc/pam.d/other
%config(noreplace) %verify(not md5 mtime size) /etc/pam.d/system-auth
%config(noreplace) %verify(not md5 mtime size) /etc/pam.d/config-util
+%config(noreplace) %verify(not md5 mtime size) /etc/pam.d/postlogin
%config(noreplace) %verify(not md5 mtime size) /etc/security/access.conf
%config(noreplace) %verify(not md5 mtime size) /etc/security/blacklist
%config(noreplace) %verify(not md5 mtime size) /etc/security/console.handlers
%attr(755,root,root) %{_sbindir}/pwgen_trigram
%attr(4755,root,root) %{_sbindir}/unix_chkpwd
%attr(4755,root,root) %{_sbindir}/unix_update
-%{_mandir}/man5/*
-%{_mandir}/man8/PAM.*
+%{_mandir}/man5/access.conf.5*
+%{_mandir}/man5/config-util.5*
+%{_mandir}/man5/console.apps.5*
+%{_mandir}/man5/console.handlers.5*
+%{_mandir}/man5/console.perms.5*
+%{_mandir}/man5/environment.5*
+%{_mandir}/man5/group.conf.5*
+%{_mandir}/man5/limits.conf.5*
+%{_mandir}/man5/namespace.conf.5*
+%{_mandir}/man5/pam.conf.5*
+%{_mandir}/man5/pam.d.5*
+%{_mandir}/man5/pam_env.conf.5*
+%{_mandir}/man5/system-auth.5*
+%{_mandir}/man5/time.conf.5*
+%{_mandir}/man8/PAM.8*
%{_mandir}/man8/mkhomedir_helper.8*
-%{_mandir}/man8/pam.*
-%{_mandir}/man8/pam_*
-%{_mandir}/man8/unix_chkpwd*
-%{_mandir}/man8/unix_update*
+%{_mandir}/man8/pam.8*
+%{_mandir}/man8/pam_*.8*
+%{_mandir}/man8/unix_chkpwd.8*
+%{_mandir}/man8/unix_update.8*
+%if %{with selinux}
%exclude %{_mandir}/man8/pam_selinux*.8*
-%exclude %{_mandir}/man8/pam_sepermit*.8*
+%exclude %{_mandir}/man8/pam_sepermit.8*
+%endif
+%exclude %{_mandir}/man8/pam_cracklib.8*
+%exclude %{_mandir}/man8/pam_userdb.8*
%ghost %verify(not md5 mtime size) /var/log/tallylog
-%files libs
-%defattr(644,root,root,755)
-%dir /%{_lib}/security/pam_filter
-%attr(755,root,root) /%{_lib}/libpam.so.*.*.*
-%attr(755,root,root) %ghost /%{_lib}/libpam.so.0
-%attr(755,root,root) /%{_lib}/libpam_misc.so.*.*.*
-%attr(755,root,root) %ghost /%{_lib}/libpam_misc.so.0
-%attr(755,root,root) /%{_lib}/libpamc.so.*.*.*
-%attr(755,root,root) %ghost /%{_lib}/libpamc.so.0
+# PAM modules
%attr(755,root,root) /%{_lib}/security/pam_access.so
%attr(755,root,root) /%{_lib}/security/pam_console.so
-%attr(755,root,root) /%{_lib}/security/pam_cracklib.so
%attr(755,root,root) /%{_lib}/security/pam_debug.so
%attr(755,root,root) /%{_lib}/security/pam_deny.so
%attr(755,root,root) /%{_lib}/security/pam_echo.so
%{?with_audit:%attr(755,root,root) /%{_lib}/security/pam_tty_audit.so}
%attr(755,root,root) /%{_lib}/security/pam_umask.so
%attr(755,root,root) /%{_lib}/security/pam_unix.so
-%attr(755,root,root) /%{_lib}/security/pam_userdb.so
%attr(755,root,root) /%{_lib}/security/pam_warn.so
%attr(755,root,root) /%{_lib}/security/pam_wheel.so
%attr(755,root,root) /%{_lib}/security/pam_xauth.so
+%files libs
+%defattr(644,root,root,755)
+%dir /%{_lib}/security/pam_filter
+%attr(755,root,root) /%{_lib}/libpam.so.*.*.*
+%attr(755,root,root) %ghost /%{_lib}/libpam.so.0
+%attr(755,root,root) /%{_lib}/libpam_misc.so.*.*.*
+%attr(755,root,root) %ghost /%{_lib}/libpam_misc.so.0
+%attr(755,root,root) /%{_lib}/libpamc.so.*.*.*
+%attr(755,root,root) %ghost /%{_lib}/libpamc.so.0
+
%files devel
%defattr(644,root,root,755)
%if %{with doc}
%attr(755,root,root) %{_sbindir}/pam_selinux_check
%config(noreplace) %verify(not md5 mtime size) /etc/pam.d/pam_selinux_check
%config(noreplace) %verify(not md5 mtime size) /etc/security/sepermit.conf
+%{_mandir}/man5/sepermit.conf.5*
%{_mandir}/man8/pam_selinux*.8*
-%{_mandir}/man8/pam_sepermit*.8*
+%{_mandir}/man8/pam_sepermit.8*
%dir /var/run/sepermit
%endif
+
+%files pam_cracklib
+%defattr(644,root,root,755)
+%doc modules/pam_cracklib/README
+%attr(755,root,root) /%{_lib}/security/pam_cracklib.so
+%{_mandir}/man8/pam_cracklib.8*
+
+%files pam_userdb
+%defattr(644,root,root,755)
+%doc modules/pam_userdb/README
+%attr(755,root,root) /%{_lib}/security/pam_userdb.so
+%{_mandir}/man8/pam_userdb.8*