This file is indexed.

/usr/share/ltsp/ltsp_config.d/debian-edu-config-ldap is in debian-edu-config 1.702.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# Store in /opt/ltsp/$arch/usr/share/ltsp/ltsp_config.d/ldap-config
#
# Fetch LTSP client settings from LDAP based on MAC address
#
# Uses ethernet address as stored in the dhcpHost objectclass using
# the dhcpHWAddress attribute or as stored in the ieee802Device
# objectclass with the macAddress attribute.
#
# This module is written to be schema agnostic, and only depend on the
# existence of attribute names.
#
# The LTSP configuration variables are saved directly using a
# ltspConfig attribute.  To set the SERVER variable, set a ltspConfig
# attribute to 'SERVER=value'.
#
# Some LDAP schema should be created with all the relevant
# configuration settings.  Something like this should work:
#
# attributetype ( some-OID NAME 'ltspConfig'
#    DESC 'LTSP config setting'
#    SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
#
# objectclass ( some-OID NAME 'ltspClientConfigAux'
#    DESC 'LTSP client configuration attributes'
#    SUP top
#    AUXILIARY
#    MAY ( ltspConfig ))
#
# objectclass ( some-OID NAME 'ltspClientConfig'
#    DESC 'LTSP client configuration attributes'
#    SUP top
#    STRUCTURAL
#    MUST ( cn )
#    MAY ( ltspConfig ))
#
# Example LDAP object:
#
# dn: cn=ltspConfigDefault,ou=somewhere
# objectclass: device
# objectclass: ltspClientConfigAux
# cn=ltspConfigDefault
# ltspConfig: SERVER=ltspserver.somewhere
# ltspConfig: SOUND=N
#
# dn: cn=hostname,ou=somewhere
# objectclass: ieee802Device
# objectclass: domainRelatedObject
# objectclass: ltspClientConfigAux
# cn=hostname
# macAddress: 00:01:02:03:04:05
# associatedDomain: hostname.somewhere
# ltspConfig: SOUND=N

#
# GOSA also have a LDAP approach for the tftp content (PXE arguments),
# searching for
#
# filter => "(&(macAddress=$mac)(objectClass=gotoTerminal))",
# attrs => [ 'gotoTerminalPath', 'gotoBootKernel',
#            'gotoKernelParameters', 'gotoLdapServer', 'cn' ] );
#
# See the fts-ltsp-ldap package for this.  The gotoTerminal object
# class is auxiliary, allowing it to be combined with other
# objectclasses.

echo "starting ldap $0"

cachefile=/var/cache/ltsp/ltsp_config_ldap

setup_from_ldap() {
    filter="(&(ltspConfig=*)$1)"
    config="$(ldapsearch -h "$LDAP_HOST" -b "$BASE_DN" -x "$filter" ltspConfig | \
	    awk '/^ltspConfig: [^=]*=[^;]*$/ { print $2 }')"
    if [ "$config" ] ; then
	if eval "$config" ; then
            echo "$config" >> $cachefile
	else
	    logger -t ltsp-ldap "got invalid LTSP config from LDAP: '$config'"
	fi
	foundinldap=true
    fi
}

lookup_mac_addrs() {
    PATH=/sbin:$PATH LANG=C ifconfig 2>/dev/null | grep -i hwaddr | awk '{print $5}' | sort -u
}

# Only check LDAP when the result can be cached, after the rw bind
# mounts are available.
if [ -r "$cachefile" ] ; then
    . "$cachefile"
elif touch $cachefile ; then
    if [ -z "$LDAP_HOST" ] ; then
	LDAP_HOST=$(debian-edu-ldapserver || :)
    fi
    if [ "$LDAP_HOST" ] && ping -W2 -c2 "$LDAP_HOST" > /dev/null 2>&1 ; then
        if [ -z "$BASE_DN" ] ; then
            BASE_DN=$(debian-edu-ldapserver -s "$LDAP_HOST" -b || :)
        fi

        if [ "$BASE_DN" ] ; then
            # First set default values if found
            setup_from_ldap '(cn=ltspConfigDefault)'

            # Next, look up the host MAC address(es).
            foundinldap=false
            if [ -e /proc/net/dev ] ; then
                for MAC in $(lookup_mac_addrs) ; do
                    filter="(|(dhcpHWAddress=ethernet $MAC)(macAddress=$MAC))"
                    setup_from_ldap "$filter"
                done
            fi

            # If the HW MAC address was not found, look for the host name
            # instead.
            if [ false = "$foundinldap" ] ; then
                fqdn=$(hostname -f)
                # No use checking if it isn't set up yet
                if [ "(none)" != "$fqdn" ] ; then
                    setup_from_ldap "(associatedDomain=$fqdn)"
                fi
            fi
        fi
    fi
    echo "export LDAP_CONFIG_CHECKED=true" >> $cachefile
fi
echo "ending ldap $0"