56 lines
1.2 KiB
Bash
56 lines
1.2 KiB
Bash
#!/bin/sh
|
|
#
|
|
# $NetBSD: include_ldap,v 1.1 2018/01/09 03:31:14 christos Exp $
|
|
#
|
|
|
|
# Modify this to suit your needs. The "$1" is the map name, eg. "auto_master".
|
|
# To debug, simply run this script with map name as the only parameter. It's
|
|
# supposed to output map contents ("key location" pairs) to standard output.
|
|
SEARCHBASE="ou=$1,dc=example,dc=com"
|
|
ENTRY_ATTRIBUTE="cn"
|
|
VALUE_ATTRIBUTE="automountInformation"
|
|
|
|
ldapsearch -LLL -x -o ldif-wrap=no -b "$SEARCHBASE" "$ENTRY_ATTRIBUTE" "$VALUE_ATTRIBUTE" | awk '
|
|
$1 == "'$ENTRY_ATTRIBUTE':" {
|
|
key = $2
|
|
}
|
|
|
|
$1 == "'$VALUE_ATTRIBUTE':" {
|
|
for (i = 2; i <= NF; i++) {
|
|
value[i] = $(i)
|
|
}
|
|
nvalues = NF
|
|
b64 = 0
|
|
}
|
|
|
|
# Double colon after attribute name means the value is in Base64.
|
|
$1 == "'$VALUE_ATTRIBUTE'::" {
|
|
for (i = 2; i <= NF; i++) {
|
|
value[i] = $(i)
|
|
}
|
|
nvalues = NF
|
|
b64 = 1
|
|
}
|
|
|
|
# Empty line - end of record.
|
|
NF == 0 && key != "" && nvalues > 0 {
|
|
printf "%s%s", key, OFS
|
|
for (i = 2; i < nvalues; i++) {
|
|
printf "%s%s", value[i], OFS
|
|
}
|
|
if (b64 == 1) {
|
|
printf "%s", value[nvalues] | "b64decode -rp"
|
|
close("b64decode -rp")
|
|
printf "%s", ORS
|
|
} else {
|
|
printf "%s%s", value[nvalues], ORS
|
|
}
|
|
}
|
|
|
|
NF == 0 {
|
|
key = ""
|
|
nvalues = 0
|
|
delete value
|
|
}
|
|
'
|