include_ldap revision 1.1 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