diff options
author | trasz <trasz@FreeBSD.org> | 2015-03-21 09:42:37 +0000 |
---|---|---|
committer | trasz <trasz@FreeBSD.org> | 2015-03-21 09:42:37 +0000 |
commit | 3a38addca2bf19f4785c67fc295314e91a6cfd30 (patch) | |
tree | 775da5c686d8321b25e1f0bee730235ed7868bab | |
parent | af26fa936a573ca25398a9fd792f7c31d1af9f7d (diff) | |
download | FreeBSD-src-3a38addca2bf19f4785c67fc295314e91a6cfd30.zip FreeBSD-src-3a38addca2bf19f4785c67fc295314e91a6cfd30.tar.gz |
Make the autofs LDAP script cope with server returning entries with
ENTRY_ATTRIBUTE (eg cn) after the VALUE_ATTRIBUTE (eg automountInformation),
instead of before.
PR: 198557
MFC after: 1 month
Sponsored by: The FreeBSD Foundation
-rw-r--r-- | etc/autofs/include_ldap | 43 |
1 files changed, 30 insertions, 13 deletions
diff --git a/etc/autofs/include_ldap b/etc/autofs/include_ldap index 58970c0..4cf70bf 100644 --- a/etc/autofs/include_ldap +++ b/etc/autofs/include_ldap @@ -15,24 +15,41 @@ $1 == "'$ENTRY_ATTRIBUTE':" { key = $2 } -$1 == "'$VALUE_ATTRIBUTE':" && key { - printf "%s%s", key, OFS - key = "" - for (i=2; i<NF; i++) { - printf "%s%s", $(i), OFS +$1 == "'$VALUE_ATTRIBUTE':" { + for (i = 2; i <= NF; i++) { + value[i] = $(i) } - printf "%s%s", $NF, ORS + nvalues = NF + b64 = 0 } # Double colon after attribute name means the value is in Base64. -$1 == "'$VALUE_ATTRIBUTE'::" && key { +$1 == "'$VALUE_ATTRIBUTE'::" { + for (i = 2; i <= NF; i++) { + value[i] = $(i) + } + nvalues = NF + b64 = 1 +} + +# Empty line - end of record. +NF == 0 && key != "" && nvalues > 0 { printf "%s%s", key, OFS - key = "" - for (i=2; i<NF; i++) { - printf "%s%s", $(i), OFS + for (i = 2; i < nvalues; i++) { + printf "%s%s", value[i], OFS + } + if (b64 == 1) { + printf "%s", value[nvalues] | "b64decode -rp" + close("b64decode -rp") + printf "%s", ORS + } else { + printf "%s%s", value[nvalues], ORS } - printf "%s", $NF | "b64decode -rp" - close("b64decode -rp") - printf "%s", ORS +} + +NF == 0 { + key = "" + nvalues = 0 + delete value } ' |