xref: /netbsd-src/etc/autofs/include_ldap (revision b985414b8f8688f3bfa6718c583260b26b0bf1d1)
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