OpenLDAPに登録されているアカウントのID、ハッシュ化されたパスワードをテキストCSVファイルに抽出したい、そんなときに作ったスクリプトです。
方針としては、まずOpenLDAPからLDIF形式でアカウント情報を吐き出し、 そのファイルをAWKを使ってCSV形式に成形します。
本体スクリプトの"ldap2csv.sh"
-----------------
"ldap2csv.sh"
-----------------
#!/bin/sh # # Dump LDAP database /usr/sbin/slapcat -l /root/ldap2csv/temp.ldif sleep 3 # Convert ldif format to csv /bin/awk -F ': ' -f /root/ldap2csv/ldif2csv.awk < /root/ldap2csv/temp.ldif > /root/ldap2csv/data.csv
-----------------
そして本体スクリプトの中にあるLDIFからCSV形式へ成形するスクリプト"ldif2csv.awk"。
LDIF形式にDumpした際、ハッシュ化されたパスワードが2行になってしまっているため、それを吸収する必要があった。2行になる場合は改行後に半角スペースが来るため、それを利用した。 また、不要な半角スペースを削除sub(/^[ ]+/, "", str)する。
-----------------
"ldif2csv.awk"
-----------------
# Create CSV from LDIF file
#
BEGIN {
name = ""
password = ""
bit = 0
str = ""
printf(" name,password\n");
}
/^userpassword:/ {
password=$2
bit=1
}
/^ / {
str=$1
sub(/^[ ]+/, "", str)
if(bit==1) password = password "" str
}
/^cn: / {
name=$2
bit=0
}
/^dn/ {
if(name != "" && password != "") printf("%s,%s\n",name,password)
name = ""
password = ""
}
# Capture last dn
END {
if(name != "" && password != "") printf("%s,%s\n",name,password)
}
-----------------


コメント