This file is indexed.

/lib/udev/netscript-hotplug is in netscript-2.4 5.5.3.

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
147
148
149
150
#!/bin/sh -e
#
# run /sbin/netscript for hotplug operations
#
# Taken from ifupdown package

PATH='/sbin:/bin:/usr/sbin:/usr/bin'

if [ -x /usr/bin/logger ]; then
	LOGGER=/usr/bin/logger
elif [ -x /bin/logger ]; then
	LOGGER=/bin/logger
else
	unset LOGGER
fi

# for diagnostics
if [ -t 1 -a -z "$LOGGER" ] || [ ! -e '/dev/log' ]; then
	mesg() {
		echo "$@" >&2
	}
elif [ -t 1 ]; then
	mesg() {
		echo "$@"
		$LOGGER -t "${0##*/}[$$]" "$@"
	}
else
	mesg() {
		$LOGGER -t "${0##*/}[$$]" "$@"
	}
fi

if [ -z "$INTERFACE" ]; then
    mesg "Bad netscript udev helper invocation: \$INTERFACE is not set"
    exit 1
fi

check_program() {
    [ -x $1 ] && return 0

    mesg "ERROR: $1 not found. You need to install the netscript-2.4 package."
    mesg "netscript udev helper $ACTION event for $INTERFACE not handled."
    exit 1
}

wait_for_interface() {
    local interface=$1
    local state

    while :; do
	read state /sys/class/net/$interface/operstate 2>/dev/null || true
	if [ "$state" != down ]; then
		return 0
	fi
	sleep 1
    done
}

net_ifup() {
    check_program /sbin/netscript

    # Don't bring up bridge interfaces under hotplug!  Can cause issues with openstack
    local BRG_DEVLIST=`brctl show | sed -e '1d' | grep '^[-a-zA-Z0-9_]' | sed -e 's/^\([a-zA-Z0-9_\-]\+\)[        ].*$/\1/'`
    if echo "$BRG_DEVLIST" | fgrep "$INTERFACE"; then
	    exit 0
    fi

    if [ -d /run/systemd/system ]; then
        exec systemctl --no-block start $(systemd-escape --template netscript@.service $INTERFACE)
    fi

    #local out=$(ps -C ifup ho args)
    #if [ "${out%$INTERFACE*}" != "$out" ]; then
    #    mesg "Already ifup-ing interface $INTERFACE"
    #    exit 0
    #fi

    #wait_for_interface lo

    exec netscript ifup $INTERFACE
}

net_ifdown() {
    check_program /sbin/netscript

    # Don't bring down bridge interfaces under hotplug!  Can cause issues with openstack
    local BRG_DEVLIST=`brctl show | sed -e '1d' | grep '^[-a-zA-Z0-9_]' | sed -e 's/^\([a-zA-Z0-9_\-]\+\)[        ].*$/\1/'`
    if echo "$BRG_DEVLIST" | fgrep "$INTERFACE"; then
	    exit 0
    fi

    # systemd will automatically ifdown the interface on device
    # removal by binding the instanced service to the network device
    if [ -d /run/systemd/system ]; then
        exit 0
    fi

    #local out=$(ps -C ifdown ho args)
    #if [ "${out%$INTERFACE*}" != "$out" ]; then
    #	mesg "Already ifdown-ing interface $INTERFACE"
    #	exit 0
    #fi

    exec netscript ifdown $INTERFACE
}

do_everything() {

case "$ACTION" in
    add)
    # these interfaces generate hotplug events *after* they are brought up
    case $INTERFACE in
	ppp*|ippp*|isdn*|plip*|lo|irda*|ipsec*)
	exit 0 ;;
    esac

    net_ifup
    ;;

    remove)
    # the pppd persist option may have been used, so it should not be killed
    #case $INTERFACE in
    #	ppp*)
    #	exit 0 ;;
    #esac

    net_ifdown
    ;;

    *)
    mesg "NET $ACTION event not supported"
    exit 1
    ;;
esac

}
# under systemd we don't do synchronous operations, so we can run in the
# foreground; we also need to, as forked children get killed right away under
# systemd
if [ -d /run/systemd/system ]; then
    do_everything
else
    # under sysvinit/upstart we need to fork as we start the long-running
    # "ifup". but there, forked processes won't get killed.
    # When udev_log="debug" stdout and stderr are pipes connected to udevd.
    # They need to be closed or udevd will wait for this process which will
    # deadlock with udevsettle until the timeout.
    exec > /dev/null 2> /dev/null
    do_everything &
fi