Select Git revision
include_ldap 2.50 KiB
#!/bin/sh
#
# $FreeBSD: releng/12.1/usr.sbin/autofs/autofs/include_ldap 280321 2015-03-21 09:42:37Z trasz $
#
query_ldap()
{
# Modify this to suit your needs. The "$1" is the map name, eg. "auto_master".
# To debug, simply run this script with map name as the only parameter. It's
# supposed to output map contents ("key location" pairs) to standard output.
SEARCHBASE="automountmapname=$1,cn=default,cn=automount,dc=ad,dc=lysator,dc=liu,dc=se"
ENTRY_ATTRIBUTE="description"
VALUE_ATTRIBUTE="automountInformation"
# fstype=nfs4 fungerar inte på FreeBSD då det inte finns något
# NFS-filsystem. Använd sed för att byta det till något vettigare.
/usr/local/bin/ldapsearch -LLL -x -o ldif-wrap=no -b "$SEARCHBASE" "$ENTRY_ATTRIBUTE" "$VALUE_ATTRIBUTE" |
sed 's/fstype=nfs4/nfsv4,minorversion=1,retrycnt=1/' | grep -v 'mail' | awk '
$1 == "'$ENTRY_ATTRIBUTE':" {
key = $2
}
$1 == "'$VALUE_ATTRIBUTE':" {
for (i = 2; i <= NF; i++) {
value[i] = $(i)
}
nvalues = NF
b64 = 0
}
# Double colon after attribute name means the value is in Base64.
$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
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
}
}
NF == 0 {
key = ""
nvalues = 0
delete value
}
'
}
# Hämta en lista med alla användarnamn
get_users()
{
/usr/local/bin/ldapsearch -LLL -x -o ldif-wrap=no -b "cn=users,cn=accounts,dc=ad,dc=lysator,dc=liu,dc=se" uid |
awk '$1 == "uid:" { print $2; }'
}
# Specialhantera auto.home genom att konstruera en yttricklig lista
# med vilka användarmonteringar som finns. Detta för att undvika att
# automount försöker montera kataloger som inte finns under /home.
if [ "$1" = "auto.home" ]
then
# Plocka ut monteringsinställningar, borde ge något liknande
# -nfsv4,minorversion=1,sec=sys,nosuid,rw home:/ceph-home/users/
HOME_MOUNT="$(query_ldap "auto.home" | head -n 1 |
awk '{ sub("\\&", "", $3); print($2 " " $3); }')"
# Konstruera en uttrycklig lista med hemkatalogmonteringar på
# formen:
# $användarnamn -nfsv4,minorversion=1,sec=sys,nosuid,rw home:/ceph-home/users/$användarnamn
{ echo defaults; get_users; } |
awk -v home_mount="$HOME_MOUNT" '{ print($1 " " home_mount $1); }'
else
query_ldap "$1"
fi