File openldap2-client.spec of Package openldap2

#
# spec file for package openldap2-client (Version 2.4.12)
#
# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via http://bugs.opensuse.org/
#

# norootforbuild


Name:           openldap2-client
BuildRequires:  cyrus-sasl-devel db-devel openslp-devel openssl-devel tcpd-devel
%if %sles_version == 9
BuildRequires:  -pwdutils
%endif
%if %sles_version == 10
BuildRequires:  -db-devel -pwdutils libdb-4_5-devel
%endif
Version:        2.4.12
Release:        5.<RELEASE7>
Url:            http://www.openldap.org
License:        BSD 3-Clause
%if "%{name}" == "openldap2"
Group:          Productivity/Networking/LDAP/Clients
Provides:       ldap2 openldap2-back-ldap openldap2-back-monitor
Obsoletes:      openldap2-back-ldap openldap2-back-monitor
Conflicts:      openldap
Requires:       libldap-2_4-2 = %{version}
PreReq:         %insserv_prereq %fillup_prereq /usr/sbin/useradd /usr/sbin/groupadd /usr/bin/grep
Summary:        OpenLDAP Client Utilities
%else
Group:          Productivity/Networking/LDAP/Clients
Conflicts:      openldap-client
Summary:        OpenLDAP Client Utilities
%endif
AutoReqProv:    on
Source:         openldap-%{version}.tar.bz2
Source1:        openldap-rc.tgz
Source2:        addonschema.tar.gz
Source3:        DB_CONFIG
Source4:        sasl-slapd.conf
Source5:        README.update
Source100:      openldap-2.3.37.tar.bz2
Patch:          openldap2.dif
Patch1:         secpatch.dif
Patch2:         slapd_conf.dif
Patch3:         ldap_conf.dif
Patch4:         ldapi_url.dif
Patch6:         libldap-gethostbyname_r.dif
Patch7:         pie-compile.dif
Patch9:         openldap2-add-gnu-source.diff
Patch11:        slapd-bconfig-del-db.dif
Patch13:        slapd-bdb-stop-checkpoint.dif
Patch14:        slapo-collect-include.dif
Patch15:        libldap_ctrl_lderrno.dif
Patch16:        slapd-privdb-config-its5736.dif
Patch17:        slapo-chain-dangling-its5742.dif
Patch18:        slapd-db-close-error-its5745.dif
Patch19:        slapo-syncprov-skip-its5709.dif
Patch20:        slapadd-no-trickle.dif
Patch21:        libldap-tls_chkhost-its6239.dif
Patch22:        Syncprov-might-lose-deletes-ITS-6555.dif
Patch23:        NUL-bytes-in-postalAddress-ITS-6379.dif
Patch24:        slapd-modrdn-crash-ITS-6570.dif
Patch25:        forwarded-bind-failure-messages-cause-success-ITS-6607-dif
Patch26:        fix-modrdn-with-empty-olddn-ITS-6768-dif
Patch100:       openldap-2.3.37.dif
BuildRoot:      %{_tmppath}/%{name}-%{version}-build

%description
This package contains the OpenLDAP client utilities.



Authors:
--------
    The OpenLDAP Project <project@openldap.org>

%if "%{name}" == "openldap2"

%package      -n openldap2-back-perl
License:        BSD 3-Clause
Summary:        OpenLDAP Perl Back-End
Requires:       openldap2 = %{version} perl = %{perl_version}
AutoReqProv:    on
Group:          Productivity/Networking/LDAP/Servers

%description -n openldap2-back-perl
The OpenLDAP Perl back-end allows you to execute Perl code specific to
different LDAP operations.



Authors:
--------
    The OpenLDAP Project <project@openldap.org>

%package      -n openldap2-back-meta
License:        BSD 3-Clause
Summary:        OpenLDAP Meta Back-End
Requires:       openldap2 = %{version}
AutoReqProv:    on
Group:          Productivity/Networking/LDAP/Servers
Provides:       openldap2:/usr/share/man/man5/slapd-meta.5.gz

%description -n openldap2-back-meta
The OpenLDAP Meta back-end is able to perform basic LDAP proxying with
respect to a set of remote LDAP servers. The information contained in
these servers can be presented as belonging to a single Directory
Information Tree (DIT).



Authors:
--------
    The OpenLDAP Project <project@openldap.org>

%else

%package      -n openldap2-devel
License:        BSD 3-Clause; "openldap 2.8 ..."; openldap 2.8
Summary:        Libraries, Header Files and Documentation for OpenLDAP
AutoReqProv:    on
Conflicts:      openldap-devel
Requires:       libldap-2_4-2 = %{version}  cyrus-sasl-devel openssl-devel
Group:          Development/Libraries/C and C++

%description -n openldap2-devel
This package provides the OpenLDAP libraries, header files, and
documentation.



Authors:
--------
    The OpenLDAP Project <project@openldap.org>

%package      -n libldap-2_4-2
License:        BSD 3-Clause; "openldap 2.8 ..."; openldap 2.8
Summary:        OpenLDAP Client Libraries
AutoReqProv:    on
Group:          Productivity/Networking/LDAP/Clients

%description -n libldap-2_4-2
This package contains the OpenLDAP client libraries.



Authors:
--------
    The OpenLDAP Project <project@openldap.org>

%endif

%prep
%setup -q -n openldap-%{version} -a1 -a2 -b100
%patch
%patch1
%patch2
%patch3
%patch4
%patch6
%if %suse_version > 920
%patch7
%endif
%patch9 -p1
%patch11
%patch13
%patch14 -p1
%patch15
%patch16
%patch17
%patch18
%patch19
%patch20 -p1
%patch21 -p1
%patch22 -p1
%patch23 -p1
%patch24 -p1
%patch25 -p1
%patch26 -p1
cp %{SOURCE5} .
cd ../openldap-2.3.37
%patch100

%build
%{?suse_update_config:%{suse_update_config -f build}}
libtoolize --force
autoreconf
export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing -DLDAP_DEPRECATED -DLDAP_CONNECTIONLESS -DSLAP_CONFIG_DELETE"
./configure --prefix=/usr \
        --exec-prefix=/usr \
        --sysconfdir=%{_sysconfdir} \
        --localstatedir=/var/run/slapd \
        --libexecdir=/usr/lib/openldap \
        --libdir=%{_libdir} \
        --mandir=%{_mandir} \
        --enable-wrappers \
        --enable-aclgroups \
        --enable-spasswd \
        --enable-modules \
        --enable-shared \
        --enable-dynamic \
        --with-tls \
        --with-cyrus-sasl \
        --enable-crypt \
        --enable-ipv6=yes \
%if "%{name}" == "openldap2"
        --enable-aci \
        --enable-bdb \
        --enable-hdb \
        --enable-rewrite \
        --enable-ldap=yes \
        --enable-meta=mod \
        --enable-monitor=yes \
        --enable-perl=mod \
        --enable-slp \
        --enable-overlays=yes \
%else
        --disable-slapd \
%endif
        --enable-lmpasswd \
        --with-yielding-select
make depend
make %{?jobs:-j%jobs}
%if "%{name}" == "openldap2"
# build a static slapcat binary from the OpenLDAP 2.3 release
# to be able to update existing databases
cd ../openldap-2.3.37
%{?suse_update_config:%{suse_update_config -f build}}
libtoolize --force
#aclocal -I build
autoreconf
export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing -DLDAP_DEPRECATED"
./configure --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc \
        --localstatedir=/var/run/slapd --libexecdir=/usr/lib/openldap \
        --libdir=%{_libdir} --mandir=%{_mandir} --enable-aci \
        --enable-hdb --enable-bdb --enable-ldbm --enable-crypt \
        --enable-ipv6=no \
        --enable-ldap --enable-monitor --enable-meta --enable-rewrite \
        --enable-dynamic=no --enable-shared=no
make depend
make %{?jobs:-j%jobs}
%endif

%check
# calculate the base port to be use in the test-suite
SLAPD_BASEPORT=10000
if [ -f /.buildenv ] ; then
    . /.buildenv
    SLAPD_BASEPORT=$(($SLAPD_BASEPORT + ${BUILD_INCARNATION:-0} * 10))
fi
export SLAPD_BASEPORT
%ifnarch %arm alpha
rm -f tests/scripts/test019-syncreplication-cascade
rm -f tests/scripts/test023-refint
rm -f tests/scripts/test022-ppolicy
rm -f tests/scripts/test033-glue-syncrepl
rm -f tests/scripts/test036-meta-concurrency
rm -f tests/scripts/test039-glue-ldap-concurrency
rm -f tests/scripts/test043-delta-syncrepl
rm -f tests/scripts/test045-syncreplication-proxied
rm -f tests/scripts/test048-syncrepl-multiproxy
rm -f tests/scripts/test050-syncrepl-multimaster
make SLAPD_DEBUG=0 test
%endif

%install
mkdir -p $RPM_BUILD_ROOT/etc/init.d
mkdir -p $RPM_BUILD_ROOT/usr/sbin
make DESTDIR=$RPM_BUILD_ROOT install
install -m 755 rc.ldap $RPM_BUILD_ROOT/etc/init.d/ldap
ln -sf ../../etc/init.d/ldap $RPM_BUILD_ROOT/usr/sbin/rcldap
mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/openldap/slapd.d
mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/sasl2
install -m 644 %{SOURCE4} $RPM_BUILD_ROOT/%{_sysconfdir}/sasl2/slapd.conf
install -m 755 -d $RPM_BUILD_ROOT/var/lib/ldap
chmod a+x $RPM_BUILD_ROOT/%{_libdir}/liblber.so*
chmod a+x $RPM_BUILD_ROOT/%{_libdir}/libldap_r.so*
chmod a+x $RPM_BUILD_ROOT/%{_libdir}/libldap.so*
%if "%{name}" == "openldap2"
mkdir -p $RPM_BUILD_ROOT/var/adm/fillup-templates
install -m 644 sysconfig.openldap $RPM_BUILD_ROOT/var/adm/fillup-templates/sysconfig.openldap
install -m 644 *.schema $RPM_BUILD_ROOT/etc/openldap/schema
install -m 644 %{SOURCE3} $RPM_BUILD_ROOT/var/lib/ldap/DB_CONFIG
install -m 644 $RPM_BUILD_ROOT/etc/openldap/DB_CONFIG.example $RPM_BUILD_ROOT/var/lib/ldap/DB_CONFIG.example
install -d $RPM_BUILD_ROOT/etc/sysconfig/SuSEfirewall2.d/services/
install -m 644 SuSEfirewall2.openldap $RPM_BUILD_ROOT/etc/sysconfig/SuSEfirewall2.d/services/openldap
rm -f `find doc/guide ! -name *.html -a ! -name *.gif -a ! -name *.png -a !  -type d`
rm -rf doc/guide/release
rm -f $RPM_BUILD_ROOT/etc/openldap/DB_CONFIG.example
rm -f $RPM_BUILD_ROOT/etc/openldap/schema/README
rm -f $RPM_BUILD_ROOT/var/run/slapd/openldap-data/DB_CONFIG.example
# install 2.3 slapcat
install -m 755 ../openldap-2.3.37/servers/slapd/slapcat $RPM_BUILD_ROOT/usr/sbin/openldap-2.3-slapcat
%endif
rm -f $RPM_BUILD_ROOT/usr/lib/openldap/modules/*.a
rm -f $RPM_BUILD_ROOT/usr/share/man/man5/slapd-dnssrv.5
rm -f $RPM_BUILD_ROOT/usr/share/man/man5/slapd-ndb.5
rm -f $RPM_BUILD_ROOT/usr/share/man/man5/slapd-null.5
rm -f $RPM_BUILD_ROOT/usr/share/man/man5/slapd-passwd.5
rm -f $RPM_BUILD_ROOT/usr/share/man/man5/slapd-shell.5
rm -f $RPM_BUILD_ROOT/usr/share/man/man5/slapd-sock.5
rm -f $RPM_BUILD_ROOT/usr/share/man/man5/slapd-sql.5
rm -f $RPM_BUILD_ROOT/usr/share/man/man5/slapd-tcl.5
# Remove *.la files, libtool does not handle this correct
rm -f  $RPM_BUILD_ROOT%{_libdir}/lib*.la
#put filelists into files
cat >openldap2.filelist <<EOF
/var/adm/fillup-templates/sysconfig.openldap
%config /etc/init.d/ldap
%config /etc/sysconfig/SuSEfirewall2.d/services/openldap
/usr/sbin/rcldap
/usr/sbin/slap*
/usr/sbin/openldap-2.3-slapcat
%dir /etc/openldap
%dir %attr(0770, ldap, ldap) /etc/openldap/slapd.d
%dir /etc/openldap/schema
%config /etc/openldap/schema/*.schema
%config /etc/openldap/schema/*.ldif
%config(noreplace) %attr(640, root, ldap) /etc/openldap/slapd.conf
%config(noreplace) %attr(640, ldap, ldap) /var/lib/ldap/DB_CONFIG
%config /var/lib/ldap/DB_CONFIG.example
%attr(640, root, ldap) /%{_sysconfdir}/openldap/slapd.conf.default
%config(noreplace) /etc/sasl2/slapd.conf
%dir /usr/lib/openldap
%dir /usr/lib/openldap/modules
/usr/lib/openldap/slapd
%dir %attr(0700, ldap, ldap) /var/lib/ldap
%dir %attr(0700, ldap, ldap) /var/run/slapd
%doc %{_mandir}/man8/sl*
%doc %{_mandir}/man5/slapd.*
%doc %{_mandir}/man5/slapd-bdb.*
%doc %{_mandir}/man5/slapd-config.*
%doc %{_mandir}/man5/slapd-hdb.*
%doc %{_mandir}/man5/slapd-ldbm.*
%doc %{_mandir}/man5/slapd-ldap.*
%doc %{_mandir}/man5/slapd-ldif.*
%doc %{_mandir}/man5/slapd-monitor.*
%doc %{_mandir}/man5/slapd-relay.*
%doc %{_mandir}/man5/slapo-*
%doc ANNOUNCEMENT COPYRIGHT INSTALL LICENSE README CHANGES
%doc doc/drafts doc/guide
%doc README.update
EOF
#
cat > openldap2-client.filelist <<EOF
%dir /etc/openldap
%config(noreplace) /etc/openldap/ldap.conf
/etc/openldap/ldap.conf.default
/usr/bin/ldapadd
/usr/bin/ldapcompare
/usr/bin/ldapdelete
/usr/bin/ldapexop
/usr/bin/ldapmodify
/usr/bin/ldapmodrdn
/usr/bin/ldapsearch
/usr/bin/ldappasswd
/usr/bin/ldapwhoami
%doc %{_mandir}/man1/ldap*
%doc %{_mandir}/man5/ldap.conf*
%doc %{_mandir}/man5/ldif.*
EOF
cat > libldap.filelist <<EOF
%{_libdir}/liblber*.so.*
%{_libdir}/libldap*.so.*
EOF
cat > openldap2-devel.filelist <<EOF
/usr/include/lber.h
/usr/include/lber_types.h
/usr/include/ldap*.h
/usr/include/slapi-plugin.h
%{_libdir}/liblber.a
%{_libdir}/liblber.so
%{_libdir}/libldap*.a
%{_libdir}/libldap*.so
%doc %{_mandir}/man3/ber*
%doc %{_mandir}/man3/lber*
%doc %{_mandir}/man3/ld_errno*
%doc %{_mandir}/man3/ldap*
EOF
cat > openldap2-back-perl.filelist <<EOF
/usr/lib/openldap/modules/back_perl*
%doc %{_mandir}/man5/slapd-perl.*
EOF
cat > openldap2-back-meta.filelist <<EOF
/usr/lib/openldap/modules/back_meta*
%doc %{_mandir}/man5/slapd-meta.*
EOF
#remove files from other spec file
%if "%{name}" == "openldap2"
cat openldap2-client.filelist libldap.filelist openldap2-devel.filelist |    
%else
cat openldap2.filelist openldap2-back-perl.filelist openldap2-back-meta.filelist |
%endif
  grep -v "%dir " |sed -e "s|^.* ||" |grep "^/" |while read name ; do
    rm -rf $RPM_BUILD_ROOT$name
  done
%if "%{name}" == "openldap2"

%pre
/usr/sbin/groupadd -g 70 -o -r ldap 2> /dev/null || :
/usr/sbin/useradd -r -o -g ldap -u 76 -s /bin/bash -c "User for OpenLDAP" -d \
    /var/lib/ldap ldap 2> /dev/null || :
# try to figure out if a db update is needed
if [ ${1:-0} -gt 1 ] && [ -f /usr/lib/openldap/slapd ] &&
    /usr/bin/strings /usr/lib/openldap/slapd | \
        grep "slapd 2.3" 2>&1 > /dev/null;
then
    # create a backup of the schema shipped with 2.3
    # at least core.schema changed between 2.3 and 2.4
    TEMPDIR=`mktemp -d /etc/openldap/schema.backup.XXXXXX`
    echo "Schema backup created in $TEMPDIR"
    cp -p --remove-destination /etc/openldap/schema/* $TEMPDIR
    echo $TEMPDIR > /etc/openldap/UPDATE_NEEDED ;
fi

%post
if [ ${1:-0} -gt 1 ] && [ -f %{_libdir}/sasl2/slapd.conf ] ; then
  cp /etc/sasl2/slapd.conf /etc/sasl2/slapd.conf.rpmnew
  cp %{_libdir}/sasl2/slapd.conf /etc/sasl2/slapd.conf
fi
%{fillup_and_insserv -n openldap ldap}
%{remove_and_set -n openldap OPENLDAP_RUN_DB_RECOVER}
# convert database if needed
if [ -f /etc/openldap/UPDATE_NEEDED ] ; then
    read SCHEMA_BACKUP < /etc/openldap/UPDATE_NEEDED
    SLAPD_CONF=/etc/openldap/slapd.conf
    sed -e "s;/etc/openldap/schema/;$SCHEMA_BACKUP/;g" \
            < $SLAPD_CONF > $SCHEMA_BACKUP/slapd.conf.update
    LOGFILE="slaptool.log"
    BACKENDS=`grep ^database $SLAPD_CONF | awk '{print $2}'`
    DIRECTORIES=(`grep ^directory $SLAPD_CONF | awk '{print $2}'`)
    MSG=""
    db_num=0
    dir_num=0
    restart=""
    /etc/init.d/ldap status 2&>1 > /dev/null
    if [ "$?" = "0" ]; then
        /etc/init.d/ldap stop
        restart="1"
    fi
    for i in $BACKENDS; do
            db_num=$((db_num+1));
            if [ "x$i" = "xbdb" ] || [ "x$i" = "xhdb" ] || [ "x$i" = "xldbm" ] ; then
                db_dir=${DIRECTORIES[$dir_num]};
                if [ -f $db_dir/id2entry.bdb ] || [ -f $db_dir/id2entry.dbb ] ; then
                    rm $db_dir/__db* ;
                    mkdir $db_dir/db_bak ;
                    echo "Dumping database to: $db_dir/ldapbak.ldif.$db_num" ;
                    /usr/sbin/openldap-2.3-slapcat -T c \
                            -f $SCHEMA_BACKUP/slapd.conf.update \
                            -n $db_num -l $db_dir/ldapbak.ldif.$db_num 2>> $db_dir/$LOGFILE;
                    if [ "x$i" = "xldbm" ] ; then
                        mv $db_dir/*.dbb $db_dir/db_bak/ ;
                    else
                        mv $db_dir/*.bdb $db_dir/db_bak/ ;
                        mv $db_dir/log.* $db_dir/db_bak/ ;
                    fi
                    mv $db_dir/alock $db_dir/db_bak/ ;
                    rm -f $db_dir/__db* ;
                fi
                dir_num=$((dir_num+1));
            fi
    done
    db_num=0
    dir_num=0
    sed -i -e "s;ldbm;bdb;g" $SLAPD_CONF 
    for i in $BACKENDS; do
        db_num=$((db_num+1));
        if [ "x$i" = "xbdb" ] || [ "x$i" = "xhdb" ] || [ "x$i" = "xldbm" ] ; then
            db_dir=${DIRECTORIES[$dir_num]};
            if [ -s $db_dir/ldapbak.ldif.$db_num ] ; then
                if [ `wc -l $db_dir/ldapbak.ldif.$db_num | awk '{print $1}'` -lt 2500000 ]; then
                    if [ "x$i" = "xldbm" ] ; then
                        echo "Converting $i database to bdb in $db_dir" ;
                        # Create default DB_CONFIG for better performance
                        echo "set_cachesize 0 15000000 1" > $db_dir/DB_CONFIG
                        echo "set_lg_regionmax 262144" >> $db_dir/DB_CONFIG
                        echo "set_lg_bsize 2097152" >> $db_dir/DB_CONFIG
                        echo "set_flags DB_LOG_AUTOREMOVE" >> $db_dir/DB_CONFIG
                    else
                        echo "Restoring $i database in $db_dir" ;
                    fi
                    slapadd -q -n $db_num -f $SLAPD_CONF -l $db_dir/ldapbak.ldif.$db_num 2>> $db_dir/$LOGFILE ;
                    if [ $? -ne 0 ]; then
                        MSG="$MSG\nFailed to restore database in $db_dir";
                        MSG="$MSG\nPlease restore manually from the LDIF dump $db_dir/ldapbak.ldif.$db_num\n";
                    else
                        rm -f $db_dir/ldapbak.ldif.$db_num
                        rm -rf $db_dir/db_bak/ 
                    fi
                else
                    MSG="$MSG\nPlease restore the database in $db_dir manually by using";
                    MSG="$MSG\nslapadd with the LDIF dump $db_dir/ldapbak.ldif.$db_num\n";
                fi
            fi
            dir_num=$((dir_num+1));
        fi
    done
    if [ "$MSG" ] ; then
        echo -e "$MSG";
    else
        rm -f /etc/openldap/UPDATE_NEEDED ;
        if [ $restart ]; then
            /etc/init.d/ldap start
        fi
    fi
fi

%preun
%stop_on_removal ldap

%postun
%restart_on_update ldap
%insserv_cleanup

%files -f openldap2.filelist
%defattr(-,root,root)

%files -n openldap2-back-perl -f openldap2-back-perl.filelist
%defattr(-,root,root)

%files -n openldap2-back-meta -f openldap2-back-meta.filelist
%defattr(-,root,root)
%else

%post -n libldap-2_4-2 -p /sbin/ldconfig

%postun -n libldap-2_4-2 -p /sbin/ldconfig

%files -f openldap2-client.filelist
%defattr(-,root,root)

%files -n libldap-2_4-2 -f libldap.filelist
%defattr(-,root,root)

%files -n openldap2-devel -f openldap2-devel.filelist
%defattr(-,root,root)
%endif

%changelog
openSUSE Build Service is sponsored by