new slapd maintainance scripts
This commit is contained in:
parent
10e4a847f6
commit
a431c66519
13
series
13
series
@ -1,13 +0,0 @@
|
|||||||
openldap-slapd-conf.patch
|
|
||||||
openldap-manpages.patch
|
|
||||||
openldap-security-pie.patch
|
|
||||||
openldap-sql-linking.patch
|
|
||||||
openldap-reentrant-gethostby.patch
|
|
||||||
openldap-export-ldif.patch
|
|
||||||
openldap-smbk5pwd-overlay.patch
|
|
||||||
openldap-ldaprc-currentdir.patch
|
|
||||||
openldap-userconfig-setgid.patch
|
|
||||||
openldap-nss-nofork.patch
|
|
||||||
openldap-nss-null-pointer.patch
|
|
||||||
openldap-slapadd-hang.patch
|
|
||||||
openldap-evolution-ntlm.patch
|
|
90
slapd-libexec-check-config.sh
Executable file
90
slapd-libexec-check-config.sh
Executable file
@ -0,0 +1,90 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Author: Jan Vcelak <jvcelak@redhat.com>
|
||||||
|
|
||||||
|
. /usr/libexec/slapd/functions
|
||||||
|
|
||||||
|
function check_config_syntax()
|
||||||
|
{
|
||||||
|
retcode=0
|
||||||
|
tmp_slaptest=`mktemp`
|
||||||
|
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
|
||||||
|
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
|
65
slapd-libexec-convert-config.sh
Executable file
65
slapd-libexec-convert-config.sh
Executable file
@ -0,0 +1,65 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Author: Jan Vcelak <jvcelak@redhat.com>
|
||||||
|
|
||||||
|
. /usr/libexec/slapd/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 [ -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`
|
||||||
|
|
||||||
|
if [ `id -u` -eq 0 ]; then
|
||||||
|
install -d --owner $SLAPD_USER --group `id -g $SLAPD_USER` --mode 0700 "$SLAPD_CONFIG_DIR" &>>$tmp_convert
|
||||||
|
run_as_ldap "/usr/sbin/slaptest -f \"$SLAPD_CONFIG_FILE\" -F \"$SLAPD_CONFIG_DIR\"" &>>$tmp_convert
|
||||||
|
retcode=$?
|
||||||
|
else
|
||||||
|
error "You are not root! Permission will not be set."
|
||||||
|
install -d --mode 0700 "$SLAPD_CONFIG_DIR" &>>$tmp_convert
|
||||||
|
/usr/sbin/slaptest -f "$SLAPD_CONFIG_FILE" -F "$SLAPD_CONFIG_DIR" &>>$tmp_convert
|
||||||
|
retcode=$?
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $retcode -ne 0 ]; then
|
||||||
|
error "Configuration conversion failed:"
|
||||||
|
cat $tmp_convert >&2
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm $tmp_convert
|
||||||
|
exit $retcode
|
134
slapd-libexec-functions
Normal file
134
slapd-libexec-functions
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
# 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
|
||||||
|
|
||||||
|
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()
|
||||||
|
{
|
||||||
|
/bin/su --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
|
40
slapd-libexec-upgrade-db.sh
Executable file
40
slapd-libexec-upgrade-db.sh
Executable file
@ -0,0 +1,40 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Author: Jan Vcelak <jvcelak@redhat.com>
|
||||||
|
|
||||||
|
. /usr/libexec/slapd/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
|
Loading…
Reference in New Issue
Block a user