Home | History | Annotate | Line # | Download | only in autofs
      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