OpenLDAPからCSVファイルを作成(bash) | SEの道標
スクリプト

OpenLDAPからCSVファイルを作成(bash)

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)
}

-----------------

コメント

タイトルとURLをコピーしました