# # # $Id: indimail.spec.in,v 1.34 2020-05-27 12:43:42+05:30 Cprogrammer Exp mbhangui $ %undefine _missing_build_ids_terminate_build %global _unpackaged_files_terminate_build 1 %if %{defined _project} # define if building on openSUSE build service %global build_on_obs 1 %global build_cflags "-DOBS_BUILD %{build_cflags}" %else %define _project local %global build_on_obs 0 %global _hardened_build 1 %endif %define nodebug 1 #global nodebug 1 %if %{defined nodebug} %global debug_package %{nil} %endif %global _prefix /usr %global sysconfdir /etc/indimail %global shareddir /usr/share/indimail %global libexecdir /usr/libexec/indimail %global mandir /usr/share/man %global nssd_version 1.4.0 %global pam_multi_version 1.3.0 %global url https://github.com/mbhangui/indimail-virtualdomains %global logdir /var/log/svc %global servicedir /service %global pam_confdir /etc/pam.d %global pam_moduledir /%{_lib}/security %global mysqlPrefix /usr %global mysqlSocket /var/run/mysqld/mysqld.sock %global defaultDomain indimail.org # Packages which do not use autosetup or setup macro # in the prep section have a problem in enabling debuginfo. # This isn't documented clearly anywhere. A workaround is # to define buildsubdir %if %{undefined nodebug} %global buildsubdir %{name}-%{version} %endif %if %build_on_obs == 1 %global packager Manvendra Bhangui > %endif Summary: PAM and Name Service Switch for IndiMail Name: indimail-auth Version: 1.0.1 Release: 1.1%{?dist} %if %build_on_obs == 1 License: GPL-3.0+ %else License: GPLv3 %endif %if %{undefined suse_version} && %{undefined sles_version} Group: System Environment/Base %else Group: Productivity/Networking/Email/Servers %endif Source1: http://downloads.sourceforge.net/indimail/nssd-%{nssd_version}.tar.gz Source2: http://downloads.sourceforge.net/indimail/pam-multi-%{pam_multi_version}.tar.gz Source3: http://downloads.sourceforge.net/indimail/%{name}-rpmlintrc URL: https://github.com/mbhangui/indimail-virtualdomains AutoReqProv: Yes # few binaries were moved to sbin and indimail >= 2.5 depends on that BuildRequires: gcc gcc-c++ make autoconf automake libtool BuildRequires: glibc glibc-devel procps binutils BuildRequires: sed findutils gzip coreutils grep BuildRequires: pam-devel libqmail-devel libqmail %if %{defined amzn} BuildRequires: mariadb-connector-c-devel %else BuildRequires: mysql-devel %endif ################################# OBS ############################### %if %build_on_obs == 1 %if 0%{?suse_version} BuildRequires: -post-build-checks #!BuildIgnore: post-build-checks #!BuildIgnore: brp-check-suse %endif %endif ################################# OBS ############################### Requires: procps /usr/bin/awk /usr/bin/which Requires: sed findutils Requires: coreutils grep /bin/sh glibc Requires: /usr/bin/hostname Requires: pam indimail-mta Conflicts: indimail < 3.2 Requires: user(qmaill) Requires: group(nofiles) %if %build_on_obs == 0 Requires(pre): shadow-utils Requires(postun): shadow-utils %endif %description indimail-auth provides nssd daemon to provide name service switch in MySQL db and pam-multi to provide multiple PAM authentication methods For more details visit %{url} %prep %{__mkdir_p} %{_builddir}/%{name}-%{version} cd %{_builddir}/%{name}-%{version} for i in nssd-%{nssd_version} pam-multi-%{pam_multi_version} do ( if [ -d $i ] ; then %{__rm} -rf $i fi if [ -f ../../SOURCES/$i.tar.bz2 ] ; then %{__bzip2} -d -c ../../SOURCES/$i.tar.bz2 | tar xf - elif [ -f ../../SOURCES/$i.tar.xz ] ; then xz -d -c ../../SOURCES/$i.tar.xz |tar xf - elif [ -f ../../SOURCES/$i.tar.gz ] ; then gunzip -c ../../SOURCES/$i.tar.gz | tar xf - else echo "No Source Archive for $i" exit 1 fi ) done %build cd %{_builddir}/%{name}-%{version} ( echo "---------------- INFORMATION ------------------------" echo target %_target echo target_alias %_target_alias echo target_cpu %_target_cpu echo target_os %_target_os echo target_vendor %_target_vendor echo PAM Module dir %{pam_moduledir} echo Building %{name}-%{version}-%{release} Build %{_build} OS %{_os} lib=%{_lib} libdir=%{_libdir} echo "------------------------------------------------------" ) > %{name}-rpm.info ( echo "NAME=%{name}" echo "Description=\"IndiMail Authentication Package\"" echo "AUTH_version=%{version}-%{release}" echo "ID=%{name}" echo "HOME_URL=\"https://github.com/mbhangui/indimail-virtualdomains\"" echo "PACKAGE_BUGREPORT=\"'Manvendra Bhangui '\"" ) > %{name}-release %if %build_on_obs == 0 if [ -x /usr/bin/uname -o -x /bin/uname ] ; then default_domain=$(echo $([ -n "$HOSTNAME" ] && echo "$HOSTNAME" || uname -n) | sed 's/^\([^\.]*\)\.\([^\.]*\)\./\2\./') else default_domain=$([ -n "$HOSTNAME" ] && echo "$HOSTNAME" | sed 's/^\([^\.]*\)\.\([^\.]*\)\./\2\./' || echo %{defaultDomain}) fi %else default_domain=%{defaultDomain} %endif #### nssd ###################### if [ -d nssd-%{nssd_version} ] ; then cd nssd-%{nssd_version} if [ -d /run ] ; then nssd_sock=/run/indimail/pwdlookup/nssd.sock elif [ -d /var/run ] ; then nssd_sock=/var/run/indimail/pwdlookup/nssd.sock else nssd_sock=/tmp/pwdlookup/nssd.sock fi %configure --prefix=%{_prefix} --libexecdir=%{libexecdir} --sysconfdir=%{sysconfdir} \ --mandir=%{mandir} --libdir=%{_libdir} --datarootdir=%{shareddir} \ --enable-nssd-socket=$nssd_sock \ --enable-nssd-config-path=%{sysconfdir}/nssd.conf \ --enable-mysqlprefix=%{mysqlPrefix} \ --enable-dlload-mysql=yes --enable-default-domain=$default_domain cd .. fi #### pam-multi ###################### if [ -d pam-multi-%{pam_multi_version} ] ; then cd pam-multi-%{pam_multi_version} %configure --prefix=%{_prefix} --datarootdir=%{shareddir} \ --mandir=%{mandir} --enable-moduledir=%{pam_moduledir} \ --enable-controldir=%{sysconfdir}/control \ --enable-pamconfdir=%{pam_confdir} \ --enable-mysqlprefix=%{mysqlPrefix} \ --enable-dlload-mysql=yes --enable-default-domain=$default_domain cd .. fi %install cd %{_builddir}/%{name}-%{version} for i in nssd-%{nssd_version} pam-multi-%{pam_multi_version} do if [ -d $i ] ; then cd $i %{__make} -s %{?_smp_mflags} %if %{defined nodebug} %{__make} -s %{?_smp_mflags} DESTDIR=%{buildroot} install-strip %else %{__make} -s %{?_smp_mflags} DESTDIR=%{buildroot} install %endif cd .. fi done %{__mkdir_p} %{buildroot}%{sysconfdir} install -m 0644 %{name}-rpm.info %{buildroot}%{sysconfdir}/%{name}-rpm.info install -m 0644 %{name}-release %{buildroot}%{sysconfdir}/%{name}-release /bin/rm -f %{name}-rpm.info %{name}-release # nssd %{__rm} -f %{buildroot}%{_libdir}/libnss_nssd.la %{__rm} -f %{buildroot}%{_libdir}/libnss_nssd.so # pam-multi %{__rm} -f %{buildroot}%{pam_moduledir}/pam-multi.la %{__rm} -f %{buildroot}%{pam_moduledir}/pam-multi.a if [ -x /bin/touch ] ; then touch=/bin/touch elif [ -x /usr/bin/touch ] ; then touch=/usr/bin/touch else touch=/bin/touch fi $touch %{buildroot}%{sysconfdir}/nssd.conf %if %{undefined suse_version} && %{undefined sles_version} %{__mkdir_p} %{buildroot}%{logdir}/pwdlookup touch %{buildroot}%{logdir}/pwdlookup/current %endif # Compress the man pages find %{buildroot}%{mandir} -type f -exec gzip -q {} \; %if %{undefined nodebug} chmod -R 755 %{buildroot}%{_prefix}/sbin %{buildroot}%{_libdir} \ %{buildroot}/%{pam_moduledir} ln -sf %{_builddir}/%{name}-%{version}/debugsourcefiles.list %{_builddir}/debugsourcefiles.list %endif %files %defattr(-, root, root,-) # # Directories # %if %{undefined suse_version} && %{undefined sles_version} %ghost %dir %attr(0755,qmaill,nofiles) %{logdir} %ghost %dir %attr(0755,qmaill,nofiles) %{logdir}/pwdlookup %ghost %attr(-,qmaill,nofiles) %{logdir}/pwdlookup/* %endif %ghost %attr(0640,root,qmail) %config(noreplace,missingok) %{sysconfdir}/nssd.conf %attr(644,root,root) %{sysconfdir}/%{name}-rpm.info %attr(644,root,root) %{sysconfdir}/%{name}-release %attr(755,root,root) %{_prefix}/sbin/nssd %attr(755,root,root) %{libexecdir}/check_getpw # pam-multi %attr(755,root,root) %{_prefix}/sbin/pam-checkpwd %attr(644,root,root) %config(noreplace) %{pam_confdir}/pam-multi %attr(640,root,indimail) %config(noreplace) %{pam_confdir}/pop3 %attr(640,root,indimail) %config(noreplace) %{pam_confdir}/imap %docdir %{shareddir}/doc %docdir %{mandir} %attr(644,root,root) %{mandir}/man[1,5,7,8]/* %if %build_on_obs == 0 %license %attr(644,root,root) %{shareddir}/doc/COPYING-nssd %license %attr(644,root,root) %{shareddir}/doc/COPYING-pam-multi %else %attr(644,root,root) %{shareddir}/doc/COPYING-nssd %attr(644,root,root) %{shareddir}/doc/COPYING-pam-multi %endif %attr(644,root,root) %{shareddir}/doc/AUTHORS-nssd %attr(644,root,root) %{shareddir}/doc/AUTHORS-pam-multi %attr(644,root,root) %{shareddir}/doc/README-nssd.md %attr(644,root,root) %{shareddir}/doc/README-pam-multi.md # Shared libraries (omit for architectures that don't support them) # pam-multi %attr(755,root,root) /%{pam_moduledir}/pam-multi.so %attr(755,root,root) %{_libdir}/libnss_nssd.so.2.0.0 %{_libdir}/libnss_nssd.so.2 %clean %if %{undefined nodebug} %{__rm} -f %{_builddir}/debugfiles.list %{_builddir}/debuglinks.list \ %{_builddir}/debugsourcefiles.list %{_builddir}/debugsources.list \ %{_builddir}/elfbins.list %endif ### SCRIPTLET ############################################################################### %pretrans if [ -d /run ] ; then rundir=/run/svscan elif [ -d /var/run ] ; then rundir=/var/run/svscan else rundir=%{servicedir} fi if [ ! -f %{servicedir}/pwdlookup/down ] ; then %{_prefix}/bin/svstat %{servicedir}/pwdlookup >/dev/null 2>&1 if [ $? -eq 0 ] ; then %{__mkdir_p} ${rundir}/pwdlookup touch ${rundir}/pwdlookup/.down %{_prefix}/bin/svc -d %{servicedir}/pwdlookup fi fi ### SCRIPTLET ############################################################################### %post argv1=$1 if [ -d /run ] ; then rundir=/run/svscan nssd_sock="/run/indimail/pwdlookup/nssd.sock" elif [ -d /var/run ] ; then rundir=/var/run/svscan nssd_sock="/var/run/indimail/pwdlookup/nssd.sock" else rundir=%{servicedir} nssd_sock="/tmp/pwdlookup/nssd.sock" fi if [ -z "$argv1" ] ; then argv1=0 fi if [ $argv1 -eq 2 ] ; then # upgrade ( echo "Upgrading indimail-auth package" if [ "%{_libdir}" != "/usr/lib64" -a "%{_libdir}" != "/usr/lib" ] ; then /sbin/ldconfig fi grep "pwdlookup/nssd.sock" %{servicedir}/pwdlookup/variables/.options >/dev/null if [ $? -ne 0 ] ; then sed -i 's{indimail/nssd.sock{indimail/pwdlookup/nssd.sock{g' %{servicedir}/pwdlookup/variables/.options fi %{_prefix}/sbin/svctool --servicedir=%{servicedir} --refreshsvc="%{servicedir}/pwdlookup" %{_prefix}/bin/svok %{servicedir}/pwdlookup if [ $? -eq 0 -a -f ${rundir}/pwdlookup/.down ] ; then %{__rm} -f ${rundir}/pwdlookup/.down %{_prefix}/bin/svc -u %{servicedir}/pwdlookup fi ) >> /var/log/indimail-auth-setup.log 2>&1 exit 0 fi echo "Doing Post Install" echo "" echo " 1. Configure %{logdir} for multilog" echo " 2. Configure %{servicedir}" echo " 3. Configure ${_sysconfdir}/nssd.conf for nssd" echo " 4. Configure nssd service" echo " 5. Configure pam-multi as alternative for SMTP auth" echo "" ( echo "Installing indimail-auth package" # Recreate ld.so links and cache if [ "%{_libdir}" != "/usr/lib64" -a "%{_libdir}" != "/usr/lib" ] ; then if [ -d %{_sysconfdir}/ld.so.conf.d ] ; then echo %{_libdir} > %{_sysconfdir}/ld.so.conf.d/indimail-auth-%{_arch}.conf fi /sbin/ldconfig fi %{__mkdir_p} %{logdir}/pwdlookup %{__chown} -R qmaill:nofiles %{logdir}/pwdlookup #nssd %{_prefix}/sbin/svctool --pwdlookup=${nssd_sock} --threads=5 --timeout=-1 \ --mysqlhost=localhost --mysqluser=indimail \ --mysqlpass=ssh-1.5- --mysqlsocket=%{mysqlSocket} --servicedir=%{servicedir} # turn off automatic refresh for services during first time installation %{_prefix}/sbin/svctool --servicedir=%{servicedir} --autorefresh="0 %{servicedir}/pwdlookup" # save variables %{_prefix}/sbin/svctool --servicedir=%{servicedir} --service-name=pwdlookup \ --export-variables=%{servicedir}/pwdlookup/variables/.variables --force #pam-multi %{_prefix}/sbin/svctool --config=add-alt ) >> /var/log/indimail-auth-setup.log 2>&1 ### SCRIPTLET ############################################################################### %postun argv1=$1 if [ -z "$argv1" ] ; then argv1=0 fi if [ $argv1 -eq 1 ] ; then if [ "%{_libdir}" != "/usr/lib64" -a "%{_libdir}" != "/usr/lib" ] ; then echo "recreating ld.so cache" /sbin/ldconfig fi exit 0 fi ( echo "removing indimail-auth package" # remove pam module for smtp %{_prefix}/sbin/svctool --config=remove-alt if [ -d %{servicedir}/pwdlookup -o -L %{servicedir}/pwdlookup ] ; then touch %{servicedir}/pwdlookup/down svc -dx %{servicedir}/pwdlookup fi if [ -d %{servicedir}/pwdlookup/log -o -L %{servicedir}/pwdlookup/log ] ; then touch %{servicedir}/pwdlookup/log/down svc -dx %{servicedir}/pwdlookup/log fi if [ -d %{servicedir}/pwdlookup -o -L %{servicedir}/pwdlookup ] ; then %{__rm} -rf %{servicedir}/pwdlookup fi if [ -h %{logdir} ] ; then log_dir=`/bin/ls -ld %{logdir} | /usr/bin/awk '{print $10}'` else log_dir=%{logdir} fi %{__rm} -rf $log_dir/pwdlookup %{__rm} -f %{sysconfdir}/nssd.conf if [ "%{_libdir}" != "/usr/lib64" -a "%{_libdir}" != "/usr/lib" ] ; then /sbin/ldconfig fi ) >> /var/log/indimail-auth-setup.log 2>&1 # fix changelog for openSUSE buildservice %changelog * Fri Apr 12 2024 08:36:00 +0000 Manvendra Bhangui 1.0.1-1.1%{?dist} Release 1.0.1-1.1 Start 07/06/2023 End 13/11/2023 - nssd: Use /run/indimail/pwdlookup for nssd.sock, nssd.pid - nssd/nssd.c: use asprintf instead of snprintf - nssd/nssd.c: re-formatted debug statements - nssd/nssd.c: refactored code - updated indimail-auth.spec, debian/preinst, debian/postinst - nssd/sock.c: be silent on missing socket file or connection refused - pam-multi.c: include crypt.h - indimail-auth.spec, debian/postinst.in: removed creation of /run/indimail/pwdlookup