11.1Schristos#!/bin/sh
21.1Schristos#
31.1Schristos# $NetBSD: include_ldap,v 1.1 2018/01/09 03:31:14 christos Exp $
41.1Schristos#
51.1Schristos
61.1Schristos# Modify this to suit your needs.  The "$1" is the map name, eg. "auto_master".
71.1Schristos# To debug, simply run this script with map name as the only parameter.  It's
81.1Schristos# supposed to output map contents ("key location" pairs) to standard output.
91.1SchristosSEARCHBASE="ou=$1,dc=example,dc=com"
101.1SchristosENTRY_ATTRIBUTE="cn"
111.1SchristosVALUE_ATTRIBUTE="automountInformation"
121.1Schristos
131.1Schristosldapsearch -LLL -x -o ldif-wrap=no -b "$SEARCHBASE" "$ENTRY_ATTRIBUTE" "$VALUE_ATTRIBUTE" | awk '
141.1Schristos$1 == "'$ENTRY_ATTRIBUTE':" {
151.1Schristos	key = $2
161.1Schristos}
171.1Schristos
181.1Schristos$1 == "'$VALUE_ATTRIBUTE':" {
191.1Schristos	for (i = 2; i <= NF; i++) {
201.1Schristos		value[i] = $(i)
211.1Schristos	}
221.1Schristos	nvalues = NF
231.1Schristos	b64 = 0
241.1Schristos}
251.1Schristos
261.1Schristos# Double colon after attribute name means the value is in Base64.
271.1Schristos$1 == "'$VALUE_ATTRIBUTE'::" {
281.1Schristos	for (i = 2; i <= NF; i++) {
291.1Schristos		value[i] = $(i)
301.1Schristos	}
311.1Schristos	nvalues = NF
321.1Schristos	b64 = 1
331.1Schristos}
341.1Schristos
351.1Schristos# Empty line - end of record.
361.1SchristosNF == 0 && key != "" && nvalues > 0 {
371.1Schristos	printf "%s%s", key, OFS
381.1Schristos	for (i = 2; i < nvalues; i++) {
391.1Schristos		printf "%s%s", value[i], OFS
401.1Schristos	}
411.1Schristos	if (b64 == 1) {
421.1Schristos		printf "%s", value[nvalues] | "b64decode -rp"
431.1Schristos		close("b64decode -rp")
441.1Schristos		printf "%s", ORS
451.1Schristos	} else {
461.1Schristos		printf "%s%s", value[nvalues], ORS
471.1Schristos	}
481.1Schristos}
491.1Schristos
501.1SchristosNF == 0 {
511.1Schristos	key = ""
521.1Schristos	nvalues = 0
531.1Schristos	delete value
541.1Schristos}
551.1Schristos'
56