This file is indexed.

/usr/lib/dracut/modules.d/80fai-autodiscover/fai-scan.sh is in fai-nfsroot 5.0.3ubuntu1.

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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#!/bin/bash

# autodiscover of the FAI server

# (c) Thomas Lange 2015

. /lib/dracut-lib.sh

if ! getargbool 0 fai.discover; then
    return
fi

port=$(getarg fai.port=)
[ -z ${port} ] && port=4711  # default value
export FAI_MONITOR_PORT=$port


# this script is called with all network interfaces
nic=$1

ivar=/run/initramfs/fai-variables
declare -a faisrv
declare -A version
declare -a para

scan_net() {

    # scan local network for FAI server
    
    local iprange=$1
    shift
    local port=$1
    local iplist
    local host
    
    iplist=$(nmap -n -e $nic --host-timeout 10 --open -oG - -p $port $iprange 2>/dev/null  | grep -v '#' | cut -d' ' -f2 | sort -n | uniq)

    # check all IPs, if a faiserver is listening there
    for host in $iplist; do
	getvar FAI_VERSION $host
	if [ -n "$FAI_VERSION" ]; then
	    faiserver+=" $host"
	    version[$host]="$FAI_VERSION"
	fi
    done
}

getvar() {

    # get a variable from the fai-monitor
    # use $monserver and $FAI_MONITOR_PORT is no arguments are used
    local ret
    local srv
    local var
    local port

    var=$1; shift
    srv=$1; shift
    port=$1; shift

    : ${port:=$FAI_MONITOR_PORT}
    : ${srv:=$monserver}

    ret=$(echo "VARIABLE $var" | nc $srv $port)
    if [[ $ret =~ ^OK\  ]]; then
	val=${ret#OK }
	eval $var=\$val
    else
	eval "$var="
    fi
}

iprange=$(ip addr show up | grep -w 'inet'|grep -v 127.0.0.1| cut -d t -f 2 | cut -d ' ' -f 2 |head -1)
echo "Scanning $iprange for FAI server (port $FAI_MONITOR_PORT)"

while [ 1 ]; do

    dialog --infobox "\n  Scanning $iprange for FAI server (port $FAI_MONITOR_PORT)\n" 5 59
    scan_net $iprange $FAI_MONITOR_PORT
    faisrv=($faiserver)

    if [ ${#faisrv[@]} -eq 0 ]; then
	dialog --colors --yesno "\n  \Zr\Z1No FAI server found.\Zn\n\n\n      Retry scan?\n" 10 28
	if [ $? -eq 1 ]; then
	   die "No FAI server found."
	   root=
	   return
	fi
    elif [ ${#faisrv[@]} -gt 1 ]; then
	echo "More than one FAI server found."
	# build parameter list for the menu
	for i in "${faisrv[@]}"; do
	    # resolve IP to host name
	    hn=$(getent hosts $i)
	    hn=${hn#* }
	    hn=${hn%%.*}
	    str=$(printf "%-20s" $hn)
	    para+=("$i" "$str FAI ${version[$i]}")
	done

	exec 3>&1
	selection=$(dialog --colors --no-cancel --menu "  More than one server found. \n  Please select a server:\n\n" 15 70 10 "${para[@]}" "Rescan" "Rescan the network" 2>&1 >&3)

	if [ "$selection" = "Rescan" ]; then
	    faiserver=""
	    para=()
	    unset version
	    declare -A version
	else
	    # one server was selected
	    monserver=${selection}
	    break
	fi
    else
	# we found excatly one FAI server
	monserver=${faisrv[0]}
	break
    fi
done

FAI_VERSION=${version[$monserver]}

getvar FAI_FLAGS
getvar NFSROOT
getvar FAI_CONFIG_SRC

if [ -z "FAI_CONFIG_SRC" ]; then
    getvar FAI_CONFIGDIR
    FAI_CONFIG_SRC="nfs://$monserver/$FAI_CONFIGDIR"
fi

dialog --infobox "\n\n FAI server $FAI_VERSION found at $monserver\n\n  Using root=$monserver:$NFSROOT\n" 9 50
sleep 4

root=$monserver:$NFSROOT
netroot=nfs:$monserver:$NFSROOT:
echo "root=$root"

echo "FAI_VERSION=$FAI_VERSION" >> $ivar
echo FAI_FLAGS=$FAI_FLAGS >> $ivar
echo "root=$monserver:$NFSROOT" >> $ivar
echo "monserver=$monserver" >> $ivar
echo "FAI_CONFIG_SRC=$FAI_CONFIG_SRC" >> $ivar

# Done, all good!
rootok=1