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