mrc0mmand / rpms / openldap

Forked from rpms/openldap 3 years ago
Clone

Blame SOURCES/libexec-functions

767ab2
# Author: Jan Vcelak <jvcelak@redhat.com>
767ab2
767ab2
SLAPD_USER=
767ab2
SLAPD_CONFIG_FILE=
767ab2
SLAPD_CONFIG_DIR=
767ab2
SLAPD_CONFIG_CUSTOM=
767ab2
SLAPD_GLOBAL_OPTIONS=
767ab2
SLAPD_SYSCONFIG_FILE=
767ab2
767ab2
function default_config()
767ab2
{
767ab2
	SLAPD_USER=ldap
767ab2
	SLAPD_CONFIG_FILE=/etc/openldap/slapd.conf
767ab2
	SLAPD_CONFIG_DIR=/etc/openldap/slapd.d
767ab2
	SLAPD_CONFIG_CUSTOM=
767ab2
	SLAPD_GLOBAL_OPTIONS=
767ab2
	SLAPD_SYSCONFIG_FILE=/etc/sysconfig/slapd
767ab2
}
767ab2
767ab2
function parse_config_options()
767ab2
{
767ab2
	user=
767ab2
	config_file=
767ab2
	config_dir=
767ab2
	while getopts :u:f:F: opt; do
767ab2
		case "$opt" in
767ab2
		u)
767ab2
			user="$OPTARG"
767ab2
			;;
767ab2
		f)
767ab2
			config_file="$OPTARG"
767ab2
			;;
767ab2
		F)
767ab2
			config_dir="$OPTARG"
767ab2
			;;
767ab2
		esac
767ab2
	done
767ab2
767ab2
	if [ -n "$user" ]; then
767ab2
		SLAPD_USER="$user"
767ab2
	fi
767ab2
767ab2
	if [ -n "$config_dir" ]; then
767ab2
		SLAPD_CONFIG_DIR="$config_dir"
767ab2
		SLAPD_CONFIG_FILE=
767ab2
		SLAPD_CONFIG_CUSTOM=1
767ab2
		SLAPD_GLOBAL_OPTIONS="-F '$config_dir'"
767ab2
	elif [ -n "$config_file" ]; then
767ab2
		SLAPD_CONFIG_DIR=
767ab2
		SLAPD_CONFIG_FILE="$config_file"
767ab2
		SLAPD_CONFIG_CUSTOM=1
767ab2
		SLAPD_GLOBAL_OPTIONS="-f '$config_file'"
767ab2
	fi
767ab2
}
767ab2
767ab2
function uses_new_config()
767ab2
{
767ab2
	[ -n "$SLAPD_CONFIG_DIR" ]
767ab2
	return $?
767ab2
}
767ab2
767ab2
function run_as_ldap()
767ab2
{
767ab2
	/sbin/runuser --shell /bin/sh --session-command "$1" "$SLAPD_USER"
767ab2
	return $?
767ab2
}
767ab2
767ab2
function ldif_unbreak()
767ab2
{
767ab2
	sed ':a;N;s/\n //;ta;P;D'
767ab2
}
767ab2
767ab2
function ldif_value()
767ab2
{
767ab2
	sed 's/^[^:]*: //'
767ab2
}
767ab2
767ab2
function databases_new()
767ab2
{
767ab2
	slapcat $SLAPD_GLOBAL_OPTIONS -c \
767ab2
	-H 'ldap:///cn=config???(|(objectClass=olcBdbConfig)(objectClass=olcHdbConfig))' 2>/dev/null | \
767ab2
		ldif_unbreak | \
767ab2
		grep '^olcDbDirectory: ' | \
767ab2
		ldif_value
767ab2
}
767ab2
767ab2
function databases_old()
767ab2
{
767ab2
	awk	'begin { database="" }
767ab2
		$1 == "database" { database=$2 }
767ab2
		$1 == "directory" { if (database == "bdb" || database == "hdb") print $2}' \
767ab2
		"$SLAPD_CONFIG_FILE"
767ab2
}
767ab2
767ab2
function certificates_new()
767ab2
{
767ab2
	slapcat $SLAPD_GLOBAL_OPTIONS -c -H 'ldap:///cn=config???(cn=config)' 2>/dev/null | \
767ab2
		ldif_unbreak | \
767ab2
		grep '^olcTLS\(CACertificateFile\|CACertificatePath\|CertificateFile\|CertificateKeyFile\): ' | \
767ab2
		ldif_value
767ab2
}
767ab2
767ab2
function certificates_old()
767ab2
{
767ab2
	awk '$1 ~ "^TLS(CACertificate(File|Path)|CertificateFile|CertificateKeyFile)$" { print $2 } ' \
767ab2
		"$SLAPD_CONFIG_FILE"
767ab2
}
767ab2
767ab2
function certificates()
767ab2
{
767ab2
	uses_new_config && certificates_new || certificates_old
767ab2
}
767ab2
767ab2
function databases()
767ab2
{
767ab2
	uses_new_config && databases_new || databases_old
767ab2
}
767ab2
767ab2
767ab2
function error()
767ab2
{
767ab2
	format="$1\n"; shift
767ab2
	printf "$format" $@ >&2
767ab2
}
767ab2
767ab2
function load_sysconfig()
767ab2
{
767ab2
	[ -r "$SLAPD_SYSCONFIG_FILE" ] || return
767ab2
767ab2
	. "$SLAPD_SYSCONFIG_FILE"
767ab2
	[ -n "$SLAPD_OPTIONS" ] && parse_config_options $SLAPD_OPTIONS
767ab2
}
767ab2
767ab2
default_config