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