1 1.1 christos #!/bin/sh 2 1.1 christos # 3 1.1 christos # $NetBSD: include_ldap,v 1.1 2018/01/09 03:31:14 christos Exp $ 4 1.1 christos # 5 1.1 christos 6 1.1 christos # Modify this to suit your needs. The "$1" is the map name, eg. "auto_master". 7 1.1 christos # To debug, simply run this script with map name as the only parameter. It's 8 1.1 christos # supposed to output map contents ("key location" pairs) to standard output. 9 1.1 christos SEARCHBASE="ou=$1,dc=example,dc=com" 10 1.1 christos ENTRY_ATTRIBUTE="cn" 11 1.1 christos VALUE_ATTRIBUTE="automountInformation" 12 1.1 christos 13 1.1 christos ldapsearch -LLL -x -o ldif-wrap=no -b "$SEARCHBASE" "$ENTRY_ATTRIBUTE" "$VALUE_ATTRIBUTE" | awk ' 14 1.1 christos $1 == "'$ENTRY_ATTRIBUTE':" { 15 1.1 christos key = $2 16 1.1 christos } 17 1.1 christos 18 1.1 christos $1 == "'$VALUE_ATTRIBUTE':" { 19 1.1 christos for (i = 2; i <= NF; i++) { 20 1.1 christos value[i] = $(i) 21 1.1 christos } 22 1.1 christos nvalues = NF 23 1.1 christos b64 = 0 24 1.1 christos } 25 1.1 christos 26 1.1 christos # Double colon after attribute name means the value is in Base64. 27 1.1 christos $1 == "'$VALUE_ATTRIBUTE'::" { 28 1.1 christos for (i = 2; i <= NF; i++) { 29 1.1 christos value[i] = $(i) 30 1.1 christos } 31 1.1 christos nvalues = NF 32 1.1 christos b64 = 1 33 1.1 christos } 34 1.1 christos 35 1.1 christos # Empty line - end of record. 36 1.1 christos NF == 0 && key != "" && nvalues > 0 { 37 1.1 christos printf "%s%s", key, OFS 38 1.1 christos for (i = 2; i < nvalues; i++) { 39 1.1 christos printf "%s%s", value[i], OFS 40 1.1 christos } 41 1.1 christos if (b64 == 1) { 42 1.1 christos printf "%s", value[nvalues] | "b64decode -rp" 43 1.1 christos close("b64decode -rp") 44 1.1 christos printf "%s", ORS 45 1.1 christos } else { 46 1.1 christos printf "%s%s", value[nvalues], ORS 47 1.1 christos } 48 1.1 christos } 49 1.1 christos 50 1.1 christos NF == 0 { 51 1.1 christos key = "" 52 1.1 christos nvalues = 0 53 1.1 christos delete value 54 1.1 christos } 55 1.1 christos ' 56