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) }
-----------------
コメント