Newer
Older
ldap / src / ldap-loglevel.sh
#!/bin/bash
########################################################################
## Script    : ldap-loglevel.sh
## Name      : LDAP のログレベル変更スクリプト
## Version   : 0.0.1
## Copyright : 2019  Nomura Kei
## License   : BSD-2-Clause
## Usage:
## |使用法) ldap-loglevel.sh [オプション] [LogLevel]
## |
## |  LDAP のログレベルを設定します。
## |  LogLevel の指定が無い場合、stats  を設定します。
## |  LogLevel には次の Level の値または、Keyword の文字列を指定可能である。
## |  複数指定する場合は、Level の値を OR した値を指定すれば良い。
## |  
## |  Level Level(Hex) Keyword Description
## |     -1            any     enable all debugging
## |      0                    no debugging (ログ出力なし)
## |      1        0x1 trace   trace function calls
## |      2        0x2 packets debug packet handling
## |      4        0x4 args    heavy trace debugging
## |      8        0x8 conns   connection management
## |     16       0x10 BER     print out packets sent and received
## |     32       0x20 filter  search filter processing
## |     64       0x40 config  configuration processing
## |    128       0x80 ACL     access control list processing
## |    256      0x100 stats   stats log connections/operations/results
## |    512      0x200 stats2  stats log entries sent
## |   1024      0x400 shell   print communication with shell backends
## |   2048      0x800 parse   print entry parsing debugging
## |  16384     0x4000 sync    syncrepl consumer processing
## |  32768     0x8000 none    only messages that get logged whatever log level is set
## |
## |  詳細は、https://www.openldap.org/doc/admin24/slapdconfig.html を参照のこと。
## |
## |[オプション]
## |  -h,--help      使用法を表示します。
## |  -v,--version   バージョンを表示します。
## |
##
########################################################################
SCRIPT_FILE=${0}
SCRIPT_DIR=`dirname ${SCRIPT_FILE}`
LIB_DIR=${SCRIPT_DIR}/../lib


########################################################################
##
## ライブラリのロード
##
[ -f "${LIB_DIR}/functions.sh" ] && . ${LIB_DIR}/bash-utils.sh



########################################################################
##
## デフォルト値
##
LOG_LEVEL=stats



########################################################################
##
## 関数群
##

# ======================================================================
#  LDAP のログレベルを指定されたログレベルに変更する
#  ldif 形式のデータを標準出力します。
#
#  @param $1 ログレベル
# ======================================================================
mkldif_for_change_loglevel()
{
cat << EOF
dn: cn=config
changeType: modify
replace: olcLogLevel
olcLogLevel: ${LOG_LEVEL}
EOF
}


########################################################################
##
## メイン処理
##
for OPT in "$@"; do
	case "${OPT}" in
		'-h'|'--help')		usage;							exit 1	;;
		'-v'|'--version')	version;						exit 1	;;
		-*)
			usage
			exit 1
			;;
		*)
			if [[ ! -z "$1" ]] && [[ ! "$1" =~ ^-+ ]]; then
				LOG_LEVEL=("$1")
				shift 1
			fi
			;;
	esac
done

TMP_LDIF=$(mktemp /tmp/ldap.XXXXXXXXXXXX.ldif)
trap 'rm -f ${TMP_LDIF}; exit 1' 1 2 3 15

mkldif_for_change_loglevel ${LOG_LEVEL} > ${TMP_LDIF}
ldapmodify -Y EXTERNAL -H ldapi:/// -f ${TMP_LDIF}
ldapsearch -Y EXTERNAL -H ldapi:/// -b 'cn=config' cn=config

rm -f ${TMP_LDIF}