meta-starlingx: remove the upstream layer
[pti/rtp.git] / meta-starlingx / meta-stx-integ / recipes-support / openldap / files / 0021-openldap-and-stx-source-and-config-files.patch
diff --git a/meta-starlingx/meta-stx-integ/recipes-support/openldap/files/0021-openldap-and-stx-source-and-config-files.patch b/meta-starlingx/meta-stx-integ/recipes-support/openldap/files/0021-openldap-and-stx-source-and-config-files.patch
deleted file mode 100644 (file)
index 14f74d0..0000000
+++ /dev/null
@@ -1,997 +0,0 @@
-From 2adc9fa71e3a47542793e61c7794629fa9255a57 Mon Sep 17 00:00:00 2001
-From: babak sarashki <babak.sarashki@windriver.com>
-Date: Tue, 5 Nov 2019 14:49:06 -0800
-Subject: [PATCH] openldap and stx source and config files
-
-From stx 1901 openldap-2.4.44-21.el7_6.src.rpm
----
- stx-sources/ldap.conf                        |  18 +++
- stx-sources/libexec-check-config.sh          |  91 ++++++++++++
- stx-sources/libexec-convert-config.sh        |  79 ++++++++++
- stx-sources/libexec-create-certdb.sh         |  70 +++++++++
- stx-sources/libexec-functions                | 136 +++++++++++++++++
- stx-sources/libexec-generate-server-cert.sh  | 118 +++++++++++++++
- stx-sources/libexec-update-ppolicy-schema.sh | 142 ++++++++++++++++++
- stx-sources/libexec-upgrade-db.sh            |  40 +++++
- stx-sources/openldap.tmpfiles                |   3 +
- stx-sources/slapd.ldif                       | 148 +++++++++++++++++++
- stx-sources/slapd.service                    |  19 +++
- stx-sources/slapd.sysconfig                  |  15 ++
- stx-sources/slapd.tmpfiles                   |   2 +
- 13 files changed, 881 insertions(+)
- create mode 100644 stx-sources/ldap.conf
- create mode 100755 stx-sources/libexec-check-config.sh
- create mode 100755 stx-sources/libexec-convert-config.sh
- create mode 100755 stx-sources/libexec-create-certdb.sh
- create mode 100644 stx-sources/libexec-functions
- create mode 100755 stx-sources/libexec-generate-server-cert.sh
- create mode 100755 stx-sources/libexec-update-ppolicy-schema.sh
- create mode 100755 stx-sources/libexec-upgrade-db.sh
- create mode 100644 stx-sources/openldap.tmpfiles
- create mode 100644 stx-sources/slapd.ldif
- create mode 100644 stx-sources/slapd.service
- create mode 100644 stx-sources/slapd.sysconfig
- create mode 100644 stx-sources/slapd.tmpfiles
-
-diff --git a/stx-sources/ldap.conf b/stx-sources/ldap.conf
-new file mode 100644
-index 0000000..aa6f8fd
---- /dev/null
-+++ b/stx-sources/ldap.conf
-@@ -0,0 +1,18 @@
-+#
-+# LDAP Defaults
-+#
-+
-+# See ldap.conf(5) for details
-+# This file should be world readable but not world writable.
-+
-+#BASE dc=example,dc=com
-+#URI  ldap://ldap.example.com ldap://ldap-master.example.com:666
-+
-+#SIZELIMIT    12
-+#TIMELIMIT    15
-+#DEREF                never
-+
-+TLS_CACERTDIR /etc/openldap/certs
-+
-+# Turning this off breaks GSSAPI used with krb5 when rdns = false
-+SASL_NOCANON  on
-diff --git a/stx-sources/libexec-check-config.sh b/stx-sources/libexec-check-config.sh
-new file mode 100755
-index 0000000..87e377f
---- /dev/null
-+++ b/stx-sources/libexec-check-config.sh
-@@ -0,0 +1,91 @@
-+#!/bin/sh
-+# Author: Jan Vcelak <jvcelak@redhat.com>
-+
-+. /usr/libexec/openldap/functions
-+
-+function check_config_syntax()
-+{
-+      retcode=0
-+      tmp_slaptest=`mktemp --tmpdir=/var/run/openldap`
-+      run_as_ldap "/usr/sbin/slaptest $SLAPD_GLOBAL_OPTIONS -u" &>$tmp_slaptest
-+      if [ $? -ne 0 ]; then
-+              error "Checking configuration file failed:"
-+              cat $tmp_slaptest >&2
-+              retcode=1
-+      fi
-+      rm $tmp_slaptest
-+      return $retcode
-+}
-+
-+function check_certs_perms()
-+{
-+      retcode=0
-+      for cert in `certificates`; do
-+              run_as_ldap "/usr/bin/test -e \"$cert\""
-+              if [ $? -ne 0 ]; then
-+                      error "TLS certificate/key/DB '%s' was not found." "$cert"
-+                      retcoder=1
-+                      continue
-+              fi
-+              run_as_ldap "/usr/bin/test -r \"$cert\""
-+              if [ $? -ne 0 ]; then
-+                      error "TLS certificate/key/DB '%s' is not readable." "$cert"
-+                      retcode=1
-+              fi
-+      done
-+      return $retcode
-+}
-+
-+function check_db_perms()
-+{
-+      retcode=0
-+      for dbdir in `databases`; do
-+              [ -d "$dbdir" ] || continue
-+              for dbfile in `find ${dbdir} -maxdepth 1 -name "*.dbb" -or -name "*.gdbm" -or -name "*.bdb" -or -name "__db.*" -or -name "log.*" -or -name "alock"`; do
-+                      run_as_ldap "/usr/bin/test -r \"$dbfile\" -a -w \"$dbfile\""
-+                      if [ $? -ne 0 ]; then
-+                              error "Read/write permissions for DB file '%s' are required." "$dbfile"
-+                              retcode=1
-+                      fi
-+              done
-+      done
-+      return $retcode
-+}
-+
-+function check_everything()
-+{
-+      retcode=0
-+      check_config_syntax || retcode=1
-+      # TODO: need support for Mozilla NSS, disabling temporarily
-+      #check_certs_perms || retcode=1
-+      check_db_perms || retcode=1
-+      return $retcode
-+}
-+
-+if [ `id -u` -ne 0 ]; then
-+      error "You have to be root to run this script."
-+      exit 4
-+fi
-+
-+load_sysconfig
-+
-+if [ -n "$SLAPD_CONFIG_DIR" ]; then
-+      if [ ! -d "$SLAPD_CONFIG_DIR" ]; then
-+              error "Configuration directory '%s' does not exist." "$SLAPD_CONFIG_DIR"
-+      else
-+              check_everything
-+              exit $?
-+      fi
-+fi
-+
-+if [ -n "$SLAPD_CONFIG_FILE" ]; then
-+      if [ ! -f "$SLAPD_CONFIG_FILE" ]; then
-+              error "Configuration file '%s' does not exist." "$SLAPD_CONFIG_FILE"
-+      else
-+              error "Warning: Usage of a configuration file is obsolete!"
-+              check_everything
-+              exit $?
-+      fi
-+fi
-+
-+exit 1
-diff --git a/stx-sources/libexec-convert-config.sh b/stx-sources/libexec-convert-config.sh
-new file mode 100755
-index 0000000..824c3b1
---- /dev/null
-+++ b/stx-sources/libexec-convert-config.sh
-@@ -0,0 +1,79 @@
-+#!/bin/sh
-+# Author: Jan Vcelak <jvcelak@redhat.com>
-+
-+. /usr/libexec/openldap/functions
-+
-+function help()
-+{
-+      error "usage: %s [-f config-file] [-F config-dir]\n" "`basename $0`"
-+      exit 2
-+}
-+
-+load_sysconfig
-+
-+while getopts :f:F: opt; do
-+      case "$opt" in
-+      f)
-+              SLAPD_CONFIG_FILE="$OPTARG"
-+              ;;
-+      F)
-+              SLAPD_CONFIG_DIR="$OPTARG"
-+              ;;
-+      *)
-+              help
-+              ;;
-+      esac
-+done
-+shift $((OPTIND-1))
-+[ -n "$1" ] && help
-+
-+# check source, target
-+
-+if [ ! -f "$SLAPD_CONFIG_FILE" ]; then
-+      error "Source configuration file '%s' not found." "$SLAPD_CONFIG_FILE"
-+      exit 1
-+fi
-+
-+if grep -iq '^dn: cn=config$' "$SLAPD_CONFIG_FILE"; then
-+      SLAPD_CONFIG_FILE_FORMAT=ldif
-+else
-+      SLAPD_CONFIG_FILE_FORMAT=conf
-+fi
-+
-+if [ -d "$SLAPD_CONFIG_DIR" ]; then
-+      if [ `find "$SLAPD_CONFIG_DIR" -maxdepth 0 -empty | wc -l` -eq 0 ]; then
-+              error "Target configuration directory '%s' is not empty." "$SLAPD_CONFIG_DIR"
-+              exit 1
-+      fi
-+fi
-+
-+# perform the conversion
-+
-+tmp_convert=`mktemp --tmpdir=/var/run/openldap`
-+
-+if [ `id -u` -eq 0 ]; then
-+      install -d --owner $SLAPD_USER --group `id -g $SLAPD_USER` --mode 0750 "$SLAPD_CONFIG_DIR" &>>$tmp_convert
-+      if [ $SLAPD_CONFIG_FILE_FORMAT = ldif ]; then
-+              run_as_ldap "/usr/sbin/slapadd -F \"$SLAPD_CONFIG_DIR\" -n 0 -l \"$SLAPD_CONFIG_FILE\"" &>>$tmp_convert
-+      else
-+              run_as_ldap "/usr/sbin/slaptest -f \"$SLAPD_CONFIG_FILE\" -F \"$SLAPD_CONFIG_DIR\"" &>>$tmp_convert
-+      fi
-+      retcode=$?
-+else
-+      error "You are not root! Permission will not be set."
-+      install -d --mode 0750 "$SLAPD_CONFIG_DIR" &>>$tmp_convert
-+      if [ $SLAPD_CONFIG_FILE_FORMAT = ldif ]; then
-+              /usr/sbin/slapadd -F "$SLAPD_CONFIG_DIR" -n 0 -l "$SLAPD_CONFIG_FILE" &>>$tmp_convert
-+      else
-+              /usr/sbin/slaptest -f "$SLAPD_CONFIG_FILE" -F "$SLAPD_CONFIG_DIR" &>>$tmp_convert
-+      fi
-+      retcode=$?
-+fi
-+
-+if [ $retcode -ne 0 ]; then
-+      error "Configuration conversion failed:"
-+      cat $tmp_convert >&2
-+fi
-+
-+rm $tmp_convert
-+exit $retcode
-diff --git a/stx-sources/libexec-create-certdb.sh b/stx-sources/libexec-create-certdb.sh
-new file mode 100755
-index 0000000..2377fdd
---- /dev/null
-+++ b/stx-sources/libexec-create-certdb.sh
-@@ -0,0 +1,70 @@
-+#!/bin/bash
-+# Author: Jan Vcelak <jvcelak@redhat.com>
-+
-+set -e
-+
-+# default options
-+
-+CERTDB_DIR=/etc/openldap/certs
-+
-+# internals
-+
-+MODULE_CKBI="$(rpm --eval %{_libdir})/libnssckbi.so"
-+RANDOM_SOURCE=/dev/urandom
-+PASSWORD_BYTES=32
-+
-+# parse arguments
-+
-+usage() {
-+      printf "usage: create-certdb.sh [-d certdb]\n" >&2
-+      exit 1
-+}
-+
-+while getopts "d:" opt; do
-+      case "$opt" in
-+      d)
-+              CERTDB_DIR="$OPTARG"
-+              ;;
-+      \?)
-+              usage
-+              ;;
-+      esac
-+done
-+
-+[ "$OPTIND" -le "$#" ] && usage
-+
-+# verify target location
-+
-+if [ ! -d "$CERTDB_DIR" ]; then
-+      printf "Directory '%s' does not exist.\n" "$CERTDB_DIR" >&2
-+      exit 1
-+fi
-+
-+if [ ! "$(find "$CERTDB_DIR"  -maxdepth 0 -empty | wc -l)" -eq 1 ]; then
-+      printf "Directory '%s' is not empty.\n" "$CERTDB_DIR" >&2
-+      exit 1
-+fi
-+
-+# create the database
-+
-+printf "Creating certificate database in '%s'.\n" "$CERTDB_DIR" >&2
-+
-+PASSWORD_FILE="$CERTDB_DIR/password"
-+OLD_UMASK="$(umask)"
-+umask 0377
-+dd if=$RANDOM_SOURCE bs=$PASSWORD_BYTES count=1 2>/dev/null | base64 > "$PASSWORD_FILE"
-+umask "$OLD_UMASK"
-+
-+certutil -d "$CERTDB_DIR" -N -f "$PASSWORD_FILE" &>/dev/null
-+
-+# load module with builtin CA certificates
-+
-+echo | modutil -dbdir "$CERTDB_DIR" -add "Root Certs" -libfile "$MODULE_CKBI" &>/dev/null
-+
-+# tune permissions
-+
-+for dbfile in "$CERTDB_DIR"/*.db; do
-+      chmod 0644 "$dbfile"
-+done
-+
-+exit 0
-diff --git a/stx-sources/libexec-functions b/stx-sources/libexec-functions
-new file mode 100644
-index 0000000..98c8631
---- /dev/null
-+++ b/stx-sources/libexec-functions
-@@ -0,0 +1,136 @@
-+# Author: Jan Vcelak <jvcelak@redhat.com>
-+
-+SLAPD_USER=
-+SLAPD_CONFIG_FILE=
-+SLAPD_CONFIG_DIR=
-+SLAPD_CONFIG_CUSTOM=
-+SLAPD_GLOBAL_OPTIONS=
-+SLAPD_SYSCONFIG_FILE=
-+
-+function default_config()
-+{
-+      SLAPD_USER=ldap
-+      SLAPD_CONFIG_FILE=/etc/openldap/slapd.conf
-+      SLAPD_CONFIG_DIR=/etc/openldap/slapd.d
-+      SLAPD_CONFIG_CUSTOM=
-+      SLAPD_GLOBAL_OPTIONS=
-+      SLAPD_SYSCONFIG_FILE=/etc/sysconfig/slapd
-+}
-+
-+function parse_config_options()
-+{
-+      user=
-+      config_file=
-+      config_dir=
-+      while getopts :u:f:F: opt; do
-+              case "$opt" in
-+              u)
-+                      user="$OPTARG"
-+                      ;;
-+              f)
-+                      config_file="$OPTARG"
-+                      ;;
-+              F)
-+                      config_dir="$OPTARG"
-+                      ;;
-+              esac
-+      done
-+
-+      unset OPTIND
-+
-+      if [ -n "$user" ]; then
-+              SLAPD_USER="$user"
-+      fi
-+
-+      if [ -n "$config_dir" ]; then
-+              SLAPD_CONFIG_DIR="$config_dir"
-+              SLAPD_CONFIG_FILE=
-+              SLAPD_CONFIG_CUSTOM=1
-+              SLAPD_GLOBAL_OPTIONS="-F '$config_dir'"
-+      elif [ -n "$config_file" ]; then
-+              SLAPD_CONFIG_DIR=
-+              SLAPD_CONFIG_FILE="$config_file"
-+              SLAPD_CONFIG_CUSTOM=1
-+              SLAPD_GLOBAL_OPTIONS="-f '$config_file'"
-+      fi
-+}
-+
-+function uses_new_config()
-+{
-+      [ -n "$SLAPD_CONFIG_DIR" ]
-+      return $?
-+}
-+
-+function run_as_ldap()
-+{
-+      /sbin/runuser --shell /bin/sh --session-command "$1" "$SLAPD_USER"
-+      return $?
-+}
-+
-+function ldif_unbreak()
-+{
-+      sed ':a;N;s/\n //;ta;P;D'
-+}
-+
-+function ldif_value()
-+{
-+      sed 's/^[^:]*: //'
-+}
-+
-+function databases_new()
-+{
-+      slapcat $SLAPD_GLOBAL_OPTIONS -c \
-+      -H 'ldap:///cn=config???(|(objectClass=olcBdbConfig)(objectClass=olcHdbConfig))' 2>/dev/null | \
-+              ldif_unbreak | \
-+              grep '^olcDbDirectory: ' | \
-+              ldif_value
-+}
-+
-+function databases_old()
-+{
-+      awk     'begin { database="" }
-+              $1 == "database" { database=$2 }
-+              $1 == "directory" { if (database == "bdb" || database == "hdb") print $2}' \
-+              "$SLAPD_CONFIG_FILE"
-+}
-+
-+function certificates_new()
-+{
-+      slapcat $SLAPD_GLOBAL_OPTIONS -c -H 'ldap:///cn=config???(cn=config)' 2>/dev/null | \
-+              ldif_unbreak | \
-+              grep '^olcTLS\(CACertificateFile\|CACertificatePath\|CertificateFile\|CertificateKeyFile\): ' | \
-+              ldif_value
-+}
-+
-+function certificates_old()
-+{
-+      awk '$1 ~ "^TLS(CACertificate(File|Path)|CertificateFile|CertificateKeyFile)$" { print $2 } ' \
-+              "$SLAPD_CONFIG_FILE"
-+}
-+
-+function certificates()
-+{
-+      uses_new_config && certificates_new || certificates_old
-+}
-+
-+function databases()
-+{
-+      uses_new_config && databases_new || databases_old
-+}
-+
-+
-+function error()
-+{
-+      format="$1\n"; shift
-+      printf "$format" $@ >&2
-+}
-+
-+function load_sysconfig()
-+{
-+      [ -r "$SLAPD_SYSCONFIG_FILE" ] || return
-+
-+      . "$SLAPD_SYSCONFIG_FILE"
-+      [ -n "$SLAPD_OPTIONS" ] && parse_config_options $SLAPD_OPTIONS
-+}
-+
-+default_config
-diff --git a/stx-sources/libexec-generate-server-cert.sh b/stx-sources/libexec-generate-server-cert.sh
-new file mode 100755
-index 0000000..e2f4974
---- /dev/null
-+++ b/stx-sources/libexec-generate-server-cert.sh
-@@ -0,0 +1,118 @@
-+#!/bin/bash
-+# Author: Jan Vcelak <jvcelak@redhat.com>
-+
-+set -e
-+
-+# default options
-+
-+CERTDB_DIR=/etc/openldap/certs
-+CERT_NAME="OpenLDAP Server"
-+PASSWORD_FILE=
-+HOSTNAME_FQDN="$(hostname --fqdn)"
-+ALT_NAMES=
-+ONCE=0
-+
-+# internals
-+
-+RANDOM_SOURCE=/dev/urandom
-+CERT_RANDOM_BYTES=256
-+CERT_KEY_TYPE=rsa
-+CERT_KEY_SIZE=1024
-+CERT_VALID_MONTHS=12
-+
-+# parse arguments
-+
-+usage() {
-+      printf "usage: generate-server-cert.sh [-d certdb-dir] [-n cert-name]\n" >&2
-+      printf "                               [-p password-file] [-h hostnames]\n" >&2
-+      printf "                               [-a dns-alt-names] [-o]\n" >&2
-+      exit 1
-+}
-+
-+while getopts "d:n:p:h:a:o" opt; do
-+      case "$opt" in
-+      d)
-+              CERTDB_DIR="$OPTARG"
-+              ;;
-+      n)
-+              CERT_NAME="$OPTARG"
-+              ;;
-+      p)
-+              PASSWORD_FILE="$OPTARG"
-+              ;;
-+      h)
-+              HOSTNAME_FQDN="$OPTARG"
-+              ;;
-+      a)
-+              ALT_NAMES="$OPTARG"
-+              ;;
-+      o)
-+              ONCE=1
-+              ;;
-+      \?)
-+              usage
-+              ;;
-+      esac
-+done
-+
-+[ "$OPTIND" -le "$#" ] && usage
-+
-+# generated options
-+
-+ONCE_FILE="$CERTDB_DIR/.slapd-leave"
-+PASSWORD_FILE="${PASSWORD_FILE:-${CERTDB_DIR}/password}"
-+ALT_NAMES="${ALT_NAMES:-${HOSTNAME_FQDN},localhost,localhost.localdomain}"
-+
-+# verify target location
-+
-+if [ "$ONCE" -eq 1 -a -f "$ONCE_FILE" ]; then
-+      printf "Skipping certificate generating, '%s' exists.\n" "$ONCE_FILE" >&2
-+      exit 0
-+fi
-+
-+if ! certutil -d "$CERTDB_DIR" -U &>/dev/null; then
-+      printf "Directory '%s' is not a valid certificate database.\n" "$CERTDB_DIR" >&2
-+      exit 1
-+fi
-+
-+printf "Creating new server certificate in '%s'.\n" "$CERTDB_DIR" >&2
-+
-+if [ ! -r "$PASSWORD_FILE" ]; then
-+      printf "Password file '%s' is not readable.\n" "$PASSWORD_FILE" >&2
-+      exit 1
-+fi
-+
-+if certutil -d "$CERTDB_DIR" -L -a -n "$CERT_NAME" &>/dev/null; then
-+      printf "Certificate '%s' already exists in the certificate database.\n" "$CERT_NAME" >&2
-+      exit 1
-+fi
-+
-+# generate server certificate (self signed)
-+
-+
-+CERT_RANDOM=$(mktemp --tmpdir=/var/run/openldap)
-+dd if=$RANDOM_SOURCE bs=$CERT_RANDOM_BYTES count=1 of=$CERT_RANDOM &>/dev/null
-+
-+certutil -d "$CERTDB_DIR" -f "$PASSWORD_FILE" -z "$CERT_RANDOM" \
-+      -S -x -n "$CERT_NAME" \
-+      -s "CN=$HOSTNAME_FQDN" \
-+      -t TC,, \
-+      -k $CERT_KEY_TYPE -g $CERT_KEY_SIZE \
-+      -v $CERT_VALID_MONTHS \
-+      -8 "$ALT_NAMES" \
-+      &>/dev/null
-+
-+rm -f $CERT_RANDOM
-+
-+# tune permissions
-+
-+if [ "$(id -u)" -eq 0 ]; then
-+      chgrp ldap "$PASSWORD_FILE"
-+      chmod g+r "$PASSWORD_FILE"
-+else
-+      printf "WARNING: The server requires read permissions on the password file in order to\n" >&2
-+      printf "         load it's private key from the certificate database.\n" >&2
-+fi
-+
-+touch "$ONCE_FILE"
-+exit 0
-diff --git a/stx-sources/libexec-update-ppolicy-schema.sh b/stx-sources/libexec-update-ppolicy-schema.sh
-new file mode 100755
-index 0000000..a853b27
---- /dev/null
-+++ b/stx-sources/libexec-update-ppolicy-schema.sh
-@@ -0,0 +1,142 @@
-+#!/bin/bash
-+# This script serves one purpose, to add a possibly missing attribute
-+# to a ppolicy schema in a dynamic configuration of OpenLDAP. This
-+# attribute was introduced in openldap-2.4.43 and slapd will not 
-+# start without it later on.
-+#
-+# The script tries to update in a directory given as first parameter,
-+# or in /etc/openldap/slapd.d implicitly.
-+#
-+# Author: Matus Honek <mhonek@redhat.com>
-+# Bugzilla: #1487857
-+
-+function log {
-+    echo "Update dynamic configuration: " $@
-+    true
-+}
-+
-+function iferr {
-+    if [ $? -ne 0 ]; then
-+      log "ERROR: " $@
-+      true
-+    else
-+      false
-+    fi
-+}
-+
-+function update {
-+    set -u
-+    shopt -s extglob
-+
-+    ORIGINAL="${1:-/etc/openldap/slapd.d}"
-+    ORIGINAL="${ORIGINAL%*(/)}"
-+
-+    ### check if necessary
-+    grep -r "pwdMaxRecordedFail" "${ORIGINAL}/cn=config/cn=schema" >/dev/null
-+    [ $? -eq 0 ] && log "Schemas look up to date. Ok. Quitting." && return 0
-+
-+    ### prep
-+    log "Prepare environment."
-+    
-+    TEMPDIR=$(mktemp -d)
-+    iferr "Could not create a temporary directory. Quitting." && return 1
-+    DBDIR="${TEMPDIR}/db"
-+    SUBDBDIR="${DBDIR}/cn=temporary"
-+
-+    mkdir "${DBDIR}"
-+    iferr "Could not create temporary configuration directory. Quitting." && return 1
-+    cp -r --no-target-directory "${ORIGINAL}" "${SUBDBDIR}"
-+    iferr "Could not copy configuration. Quitting." && return 1
-+    
-+    pushd "$TEMPDIR" >/dev/null
-+
-+    cat > temp.conf <<EOF
-+database ldif
-+suffix cn=temporary
-+directory db
-+access to * by * manage
-+EOF
-+    
-+    SOCKET="$(pwd)/socket"
-+    LISTENER="ldapi://${SOCKET//\//%2F}"
-+    CONN_PARAMS=("-Y" "EXTERNAL" "-H" "${LISTENER}")
-+    
-+    slapd -f temp.conf -h "$LISTENER" -d 0 >/dev/null 2>&1 &
-+    SLAPDPID="$!"
-+    sleep 2
-+
-+    ldapadd ${CONN_PARAMS[@]} -d 0 >/dev/null 2>&1 <<EOF
-+dn: cn=temporary
-+objectClass: olcGlobal
-+cn: temporary
-+EOF
-+    iferr "Could not populate the temporary database. Quitting." && return 1
-+    
-+    ### update
-+    log "Update with new pwdMaxRecordedFailure attribute."
-+    FILTER="(&"
-+    FILTER+="(olcObjectClasses=*'pwdPolicy'*)"
-+    FILTER+="(!(olcObjectClasses=*'pwdPolicy'*'pwdMaxRecordedFailure'*))"
-+    FILTER+="(!(olcAttributeTypes=*'pwdMaxRecordedFailure'*))"
-+    FILTER+=")"
-+    RES=$(ldapsearch ${CONN_PARAMS[@]} \
-+                   -b cn=schema,cn=config,cn=temporary \
-+                   -LLL \
-+                   -o ldif-wrap=no \
-+                   "$FILTER" \
-+                   dn olcObjectClasses \
-+                   2>/dev/null \
-+            | sed '/^$/d')
-+    DN=$(printf "$RES" | grep '^dn:')
-+    OC=$(printf "$RES" | grep "^olcObjectClasses:.*'pwdPolicy'")
-+    NEWOC="${OC//$ pwdSafeModify /$ pwdSafeModify $ pwdMaxRecordedFailure }"
-+
-+    test $(echo "$DN" | wc -l) = 1
-+    iferr "Received more than one DN. Cannot continue. Quitting." && return 1
-+    test "$NEWOC" != "$OC"
-+    iferr "Updating pwdPolicy objectClass definition failed. Quitting." && return 1
-+
-+    ldapmodify ${CONN_PARAMS[@]} -d 0 >/dev/null 2>&1 <<EOF
-+$DN
-+changetype: modify
-+add: olcAttributeTypes
-+olcAttributeTypes: ( 1.3.6.1.4.1.42.2.27.8.1.30 NAME 'pwdMaxRecordedFailur
-+ e' EQUALITY integerMatch ORDERING integerOrderingMatch  SYNTAX 1.3.6.1.4.1.
-+ 1466.115.121.1.27 SINGLE-VALUE )
-+-
-+delete: olcObjectClasses
-+$OC
-+-
-+add: olcObjectClasses
-+$NEWOC
-+EOF
-+    iferr "Updating with new attribute failed. Quitting." && return 1
-+
-+    popd >/dev/null
-+
-+    ### apply
-+    log "Apply changes."
-+    cp -r --no-target-directory "$ORIGINAL" "$ORIGINAL~backup"
-+    iferr "Backing up old configuration failed. Quitting." && return 1
-+    cp -r --no-target-directory "$SUBDBDIR" "$ORIGINAL"
-+    iferr "Applying new configuration failed. Quitting." && return 1
-+    
-+    ### clean up
-+    log "Clean up."
-+    kill "$SLAPDPID"
-+    SLAPDPID=
-+    rm -rf "$TEMPDIR"
-+    TEMPDIR=
-+}
-+
-+SLAPDPID=
-+TEMPDIR=
-+update "$1"
-+if [ $? -ne 0 ]; then
-+    log "Clean up."
-+    echo "$SLAPDPID"
-+    echo "$TEMPDIR"
-+    kill "$SLAPDPID"
-+    rm -rf "$TEMPDIR"
-+fi
-+log "Finished."
-diff --git a/stx-sources/libexec-upgrade-db.sh b/stx-sources/libexec-upgrade-db.sh
-new file mode 100755
-index 0000000..1543c80
---- /dev/null
-+++ b/stx-sources/libexec-upgrade-db.sh
-@@ -0,0 +1,40 @@
-+#!/bin/sh
-+# Author: Jan Vcelak <jvcelak@redhat.com>
-+
-+. /usr/libexec/openldap/functions
-+
-+if [ `id -u` -ne 0 ]; then
-+      error "You have to be root to run this command."
-+      exit 4
-+fi
-+
-+load_sysconfig
-+retcode=0
-+
-+for dbdir in `databases`; do
-+      upgrade_log="$dbdir/db_upgrade.`date +%Y%m%d%H%M%S`.log"
-+      bdb_files=`find "$dbdir" -maxdepth 1 -name "*.bdb" -printf '"%f" '`
-+
-+      # skip uninitialized database
-+      [ -z "$bdb_files"]  || continue
-+
-+      printf "Updating '%s', logging into '%s'\n" "$dbdir" "$upgrade_log"
-+
-+      # perform the update
-+      for command in \
-+              "/usr/bin/db_recover -v -h \"$dbdir\"" \
-+              "/usr/bin/db_upgrade -v -h \"$dbdir\" $bdb_files" \
-+              "/usr/bin/db_checkpoint -v -h \"$dbdir\" -1" \
-+      ; do
-+              printf "Executing: %s\n" "$command" &>>$upgrade_log
-+              run_as_ldap "$command" &>>$upgrade_log
-+              result=$?
-+              printf "Exit code: %d\n" $result >>"$upgrade_log"
-+              if [ $result -ne 0 ]; then
-+                      printf "Upgrade failed: %d\n" $result
-+                      retcode=1
-+              fi
-+      done
-+done
-+
-+exit $retcode
-diff --git a/stx-sources/openldap.tmpfiles b/stx-sources/openldap.tmpfiles
-new file mode 100644
-index 0000000..aa0e805
---- /dev/null
-+++ b/stx-sources/openldap.tmpfiles
-@@ -0,0 +1,3 @@
-+# OpenLDAP TLSMC runtime directories
-+x /tmp/openldap-tlsmc-*
-+X /tmp/openldap-tlsmc-*
-diff --git a/stx-sources/slapd.ldif b/stx-sources/slapd.ldif
-new file mode 100644
-index 0000000..7b7f328
---- /dev/null
-+++ b/stx-sources/slapd.ldif
-@@ -0,0 +1,148 @@
-+#
-+# See slapd-config(5) for details on configuration options.
-+# This file should NOT be world readable.
-+#
-+
-+dn: cn=config
-+objectClass: olcGlobal
-+cn: config
-+olcArgsFile: /var/run/openldap/slapd.args
-+olcPidFile: /var/run/openldap/slapd.pid
-+#
-+# TLS settings
-+#
-+olcTLSCACertificatePath: /etc/openldap/certs
-+olcTLSCertificateFile: "OpenLDAP Server"
-+olcTLSCertificateKeyFile: /etc/openldap/certs/password
-+#
-+# Do not enable referrals until AFTER you have a working directory
-+# service AND an understanding of referrals.
-+#
-+#olcReferral: ldap://root.openldap.org
-+#
-+# Sample security restrictions
-+#     Require integrity protection (prevent hijacking)
-+#     Require 112-bit (3DES or better) encryption for updates
-+#     Require 64-bit encryption for simple bind
-+#
-+#olcSecurity: ssf=1 update_ssf=112 simple_bind=64
-+
-+
-+#
-+# Load dynamic backend modules:
-+# - modulepath is architecture dependent value (32/64-bit system)
-+# - back_sql.la backend requires openldap-servers-sql package
-+# - dyngroup.la and dynlist.la cannot be used at the same time
-+#
-+
-+#dn: cn=module,cn=config
-+#objectClass: olcModuleList
-+#cn: module
-+#olcModulepath:       /usr/lib/openldap
-+#olcModulepath:       /usr/lib64/openldap
-+#olcModuleload: accesslog.la
-+#olcModuleload: auditlog.la
-+#olcModuleload: back_dnssrv.la
-+#olcModuleload: back_ldap.la
-+#olcModuleload: back_mdb.la
-+#olcModuleload: back_meta.la
-+#olcModuleload: back_null.la
-+#olcModuleload: back_passwd.la
-+#olcModuleload: back_relay.la
-+#olcModuleload: back_shell.la
-+#olcModuleload: back_sock.la
-+#olcModuleload: collect.la
-+#olcModuleload: constraint.la
-+#olcModuleload: dds.la
-+#olcModuleload: deref.la
-+#olcModuleload: dyngroup.la
-+#olcModuleload: dynlist.la
-+#olcModuleload: memberof.la
-+#olcModuleload: pcache.la
-+#olcModuleload: ppolicy.la
-+#olcModuleload: refint.la
-+#olcModuleload: retcode.la
-+#olcModuleload: rwm.la
-+#olcModuleload: seqmod.la
-+#olcModuleload: smbk5pwd.la
-+#olcModuleload: sssvlv.la
-+#olcModuleload: syncprov.la
-+#olcModuleload: translucent.la
-+#olcModuleload: unique.la
-+#olcModuleload: valsort.la
-+
-+
-+#
-+# Schema settings
-+#
-+
-+dn: cn=schema,cn=config
-+objectClass: olcSchemaConfig
-+cn: schema
-+
-+include: file:///etc/openldap/schema/core.ldif
-+
-+#
-+# Frontend settings
-+#
-+
-+dn: olcDatabase=frontend,cn=config
-+objectClass: olcDatabaseConfig
-+objectClass: olcFrontendConfig
-+olcDatabase: frontend
-+#
-+# Sample global access control policy:
-+#     Root DSE: allow anyone to read it
-+#     Subschema (sub)entry DSE: allow anyone to read it
-+#     Other DSEs:
-+#             Allow self write access
-+#             Allow authenticated users read access
-+#             Allow anonymous users to authenticate
-+#
-+#olcAccess: to dn.base="" by * read
-+#olcAccess: to dn.base="cn=Subschema" by * read
-+#olcAccess: to *
-+#     by self write
-+#     by users read
-+#     by anonymous auth
-+#
-+# if no access controls are present, the default policy
-+# allows anyone and everyone to read anything but restricts
-+# updates to rootdn.  (e.g., "access to * by * read")
-+#
-+# rootdn can always read and write EVERYTHING!
-+#
-+
-+#
-+# Configuration database
-+#
-+
-+dn: olcDatabase=config,cn=config
-+objectClass: olcDatabaseConfig
-+olcDatabase: config
-+olcAccess: to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,c
-+ n=auth" manage by * none
-+
-+#
-+# Server status monitoring
-+#
-+
-+dn: olcDatabase=monitor,cn=config
-+objectClass: olcDatabaseConfig
-+olcDatabase: monitor
-+olcAccess: to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,c
-+ n=auth" read by dn.base="cn=Manager,dc=my-domain,dc=com" read by * none
-+
-+#
-+# Backend database definitions
-+#
-+
-+dn: olcDatabase=hdb,cn=config
-+objectClass: olcDatabaseConfig
-+objectClass: olcHdbConfig
-+olcDatabase: hdb
-+olcSuffix: dc=my-domain,dc=com
-+olcRootDN: cn=Manager,dc=my-domain,dc=com
-+olcDbDirectory:       /var/lib/ldap
-+olcDbIndex: objectClass eq,pres
-+olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
-diff --git a/stx-sources/slapd.service b/stx-sources/slapd.service
-new file mode 100644
-index 0000000..8a3a722
---- /dev/null
-+++ b/stx-sources/slapd.service
-@@ -0,0 +1,19 @@
-+[Unit]
-+Description=OpenLDAP Server Daemon
-+After=syslog.target network-online.target
-+Documentation=man:slapd
-+Documentation=man:slapd-config
-+Documentation=man:slapd-hdb
-+Documentation=man:slapd-mdb
-+Documentation=file:///usr/share/doc/openldap-servers/guide.html
-+
-+[Service]
-+Type=forking
-+PIDFile=/var/run/openldap/slapd.pid
-+Environment="SLAPD_URLS=ldap:/// ldapi:///" "SLAPD_OPTIONS="
-+EnvironmentFile=/etc/sysconfig/slapd
-+ExecStartPre=/usr/libexec/openldap/check-config.sh
-+ExecStart=/usr/sbin/slapd -u ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS
-+
-+[Install]
-+WantedBy=multi-user.target
-diff --git a/stx-sources/slapd.sysconfig b/stx-sources/slapd.sysconfig
-new file mode 100644
-index 0000000..68091a5
---- /dev/null
-+++ b/stx-sources/slapd.sysconfig
-@@ -0,0 +1,15 @@
-+# OpenLDAP server configuration
-+# see 'man slapd' for additional information
-+
-+# Where the server will run (-h option)
-+# - ldapi:/// is required for on-the-fly configuration using client tools
-+#   (use SASL with EXTERNAL mechanism for authentication)
-+# - default: ldapi:/// ldap:///
-+# - example: ldapi:/// ldap://127.0.0.1/ ldap://10.0.0.1:1389/ ldaps:///
-+SLAPD_URLS="ldapi:/// ldap:///"
-+
-+# Any custom options
-+#SLAPD_OPTIONS=""
-+
-+# Keytab location for GSSAPI Kerberos authentication
-+#KRB5_KTNAME="FILE:/etc/openldap/ldap.keytab"
-diff --git a/stx-sources/slapd.tmpfiles b/stx-sources/slapd.tmpfiles
-new file mode 100644
-index 0000000..56aa32e
---- /dev/null
-+++ b/stx-sources/slapd.tmpfiles
-@@ -0,0 +1,2 @@
-+# openldap runtime directory for slapd.arg and slapd.pid
-+d /var/run/openldap 0755 ldap ldap -
--- 
-2.17.1
-