Misc network fixes so we work on my stable server. Splash plugin removed as splashtuils-1.4 now ships with its own.
This commit is contained in:
parent
c5ddc6ef74
commit
0c98067d57
@ -6,22 +6,6 @@ ifconfig_depend() {
|
||||
provide interface
|
||||
}
|
||||
|
||||
_get_mac_address() {
|
||||
local mac=$(LC_ALL=C ifconfig "${IFACE}" | \
|
||||
sed -n -e 's/.* HWaddr \(..:..:..:..:..:..\).*/\1/p')
|
||||
|
||||
|
||||
case "${mac}" in
|
||||
00:00:00:00:00:00) ;;
|
||||
44:44:44:44:44:44) ;;
|
||||
FF:FF:FF:FF:FF:FF) ;;
|
||||
"") ;;
|
||||
*) echo "${mac}"; return 0 ;;
|
||||
esac
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
_up() {
|
||||
ifconfig "${IFACE}" up
|
||||
}
|
||||
@ -54,6 +38,26 @@ _is_wireless() {
|
||||
grep -Eq "^[[:space:]]*${IFACE}:[[:space:]]+" /proc/net/wireless
|
||||
}
|
||||
|
||||
_get_mac_address() {
|
||||
local mac=$(LC_ALL=C ifconfig "${IFACE}" | \
|
||||
sed -n -e 's/.* HWaddr \(..:..:..:..:..:..\).*/\1/p')
|
||||
|
||||
|
||||
case "${mac}" in
|
||||
00:00:00:00:00:00) ;;
|
||||
44:44:44:44:44:44) ;;
|
||||
FF:FF:FF:FF:FF:FF) ;;
|
||||
"") ;;
|
||||
*) echo "${mac}"; return 0 ;;
|
||||
esac
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
_set_mac_address() {
|
||||
ifconfig "${IFACE}" hw ether "$1"
|
||||
}
|
||||
|
||||
_get_inet_address() {
|
||||
set -- $(LC_ALL=C ifconfig "${IFACE}" |
|
||||
sed -n -e 's/.*inet addr:\([^ ]*\).*Mask:\([^ ]*\).*/\1 \2/p')
|
||||
|
@ -7,21 +7,6 @@ iproute2_depend() {
|
||||
after ifconfig
|
||||
}
|
||||
|
||||
_get_mac_address() {
|
||||
local mac=$(LC_ALL=C ip link show "${IFACE}" | sed -n \
|
||||
-e 'y/abcdef/ABCDEF/' \
|
||||
-e '/link\// s/^.*\<\(..:..:..:..:..:..\)\>.*/\1/p')
|
||||
|
||||
case "${mac}" in
|
||||
00:00:00:00:00:00) ;;
|
||||
44:44:44:44:44:44) ;;
|
||||
FF:FF:FF:FF:FF:FF) ;;
|
||||
"") ;;
|
||||
*) echo "${mac}"; return 0 ;;
|
||||
esac
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
_up() {
|
||||
ip link set up dev "${IFACE}"
|
||||
@ -55,6 +40,26 @@ _is_wireless() {
|
||||
grep -Eq "^[[:space:]]*${IFACE}:[[:space:]]+" /proc/net/wireless
|
||||
}
|
||||
|
||||
_get_mac_address() {
|
||||
local mac=$(LC_ALL=C ip link show "${IFACE}" | sed -n \
|
||||
-e 'y/abcdef/ABCDEF/' \
|
||||
-e '/link\// s/^.*\<\(..:..:..:..:..:..\)\>.*/\1/p')
|
||||
|
||||
case "${mac}" in
|
||||
00:00:00:00:00:00) ;;
|
||||
44:44:44:44:44:44) ;;
|
||||
FF:FF:FF:FF:FF:FF) ;;
|
||||
"") ;;
|
||||
*) echo "${mac}"; return 0 ;;
|
||||
esac
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
_set_mac_address() {
|
||||
ip link set address "$1" dev "${IFACE}"
|
||||
}
|
||||
|
||||
_get_inet_addresses() {
|
||||
LC_ALL=C ip -family inet addr show "${IFACE}" | \
|
||||
sed -n -e 's/.*inet \([^ ]*\).*/\1/p'
|
||||
@ -160,8 +165,9 @@ iproute2_pre_start() {
|
||||
metric=1000
|
||||
|
||||
ebegin "Creating tunnel ${IFVAR}"
|
||||
ip tunnel add "${tunnel}"
|
||||
ip tunnel add ${tunnel} name "${IFACE}"
|
||||
eend $? || return 1
|
||||
_up
|
||||
fi
|
||||
|
||||
return 0
|
||||
|
@ -3,7 +3,7 @@
|
||||
# Many thanks to all the people in the Gentoo forums for their ideas and
|
||||
# motivation for me to make this and keep on improving it
|
||||
|
||||
_config_vars="$_config_vars essid mode associate_timeout sleep_scan preferred_aps blacklist_aps"
|
||||
_config_vars="$_config_vars ssid mode associate_timeout sleep_scan preferred_aps blacklist_aps"
|
||||
|
||||
iwconfig_depend() {
|
||||
program /sbin/iwconfig
|
||||
@ -155,8 +155,8 @@ iwconfig_setup_specific() {
|
||||
fi
|
||||
|
||||
# Then set the SSID
|
||||
if ! eval iwconfig "${IFACE}" essid "${SSID}" ; then
|
||||
eerror "${IFACE} does not support setting SSID to \"${ESSID}\""
|
||||
if ! iwconfig "${IFACE}" essid "${SSID}" ; then
|
||||
eerror "${IFACE} does not support setting SSID to \"${SSID}\""
|
||||
return 1
|
||||
fi
|
||||
|
||||
@ -187,7 +187,7 @@ iwconfig_wait_for_association() {
|
||||
# Use sysfs if we can
|
||||
if [ -e /sys/class/net/"${IFACE}"/carrier ] ; then
|
||||
if [ "$(cat /sys/class/net/"${IFACE}"/carrier)" = "1" ] ; then
|
||||
# Double check we have an essid. This is mainly for buggy
|
||||
# Double check we have an ssid. This is mainly for buggy
|
||||
# prism54 drivers that always set their carrier on :/
|
||||
[ -n "$(iwgetid --raw "${IFACE}")" ] && return 0
|
||||
fi
|
||||
@ -220,7 +220,7 @@ iwconfig_associate() {
|
||||
|
||||
if [ "${SSID}" = "any" ]; then
|
||||
iwconfig "${IFACE}" ap any 2>/dev/null
|
||||
unset ESSIDVAR
|
||||
unset SSIDVAR
|
||||
else
|
||||
SSIDVAR=$(_shell_var "${SSID}")
|
||||
key="$(iwconfig_get_wep_key "${mac}")"
|
||||
@ -243,9 +243,9 @@ iwconfig_associate() {
|
||||
[ "${key}" != "off" ] && w="$(iwconfig_get_wep_status "${iface}")"
|
||||
fi
|
||||
|
||||
if ! eval iwconfig "${IFACE}" essid "${SSID}" ; then
|
||||
if ! iwconfig "${IFACE}" essid "${SSID}" ; then
|
||||
if [ "${SSID}" != "any" ] ; then
|
||||
ewarn "${IFACE} does not support setting ESSID to \"${SSID}\""
|
||||
ewarn "${IFACE} does not support setting SSID to \"${SSID}\""
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -315,7 +315,7 @@ iwconfig_scan() {
|
||||
if [ -z "${scan}" ] ; then
|
||||
ewarn "${iface} does not support scanning"
|
||||
eoutdent
|
||||
eval x=\$adhoc_essid_${IFVAR}
|
||||
eval x=\$adhoc_ssid_${IFVAR}
|
||||
[ -n "${x}" ] && return 0
|
||||
if [ -n "${preferred_aps}" ] ; then
|
||||
[ "${associate_order}" = "forcepreferred" ] || \
|
||||
@ -328,9 +328,9 @@ iwconfig_scan() {
|
||||
eerror "or hardcode the SSID to \"any\" and let the driver find an Access Point"
|
||||
eerror " ssid_${IFVAR}=\"any\""
|
||||
eerror "or configure defaulting to Ad-Hoc when Managed fails"
|
||||
eerror " adhoc_essid_${IFVAR}=\"WLAN\""
|
||||
eerror "or hardcode the ESSID against the interface (not recommended)"
|
||||
eerror " essid_${IFVAR}=\"ESSID\""
|
||||
eerror " adhoc_ssid_${IFVAR}=\"WLAN\""
|
||||
eerror "or hardcode the SSID against the interface (not recommended)"
|
||||
eerror " ssid_${IFVAR}=\"SSID\""
|
||||
return 1
|
||||
fi
|
||||
|
||||
@ -507,13 +507,13 @@ iwconfig_force_preferred() {
|
||||
}
|
||||
|
||||
iwconfig_connect_preferred() {
|
||||
local essid= i=0 mode= mac= enc= freq= chan=
|
||||
local ssid= i=0 mode= mac= enc= freq= chan=
|
||||
|
||||
eval "$(_get_array preferred_aps)"
|
||||
for essid in "$@"; do
|
||||
for ssid in "$@"; do
|
||||
while [ ${i} -le ${APS} ] ; do
|
||||
eval e=\$SSID_${i}
|
||||
if [ "${e}" = "${essid}" ] ; then
|
||||
if [ "${e}" = "${ssid}" ] ; then
|
||||
SSID=${e}
|
||||
eval mode=\$MODE_${i}
|
||||
eval mac=\$MAC_${i}
|
||||
@ -531,13 +531,13 @@ iwconfig_connect_preferred() {
|
||||
}
|
||||
|
||||
iwconfig_connect_not_preferred() {
|
||||
local essid= i=0 mode= mac= enc= freq= chan= pref=false
|
||||
local ssid= i=0 mode= mac= enc= freq= chan= pref=false
|
||||
|
||||
while [ ${i} -le ${APS} ] ; do
|
||||
eval e=\$SSID_${i}
|
||||
eval "$(_get_array preferred_aps)"
|
||||
for essid in "$@" ; do
|
||||
if [ "${e}" = "${essid}" ] ; then
|
||||
for ssid in "$@" ; do
|
||||
if [ "${e}" = "${ssid}" ] ; then
|
||||
pref=true
|
||||
break
|
||||
fi
|
||||
@ -566,14 +566,17 @@ iwconfig_defaults() {
|
||||
done
|
||||
|
||||
# Release the AP forced
|
||||
# Must do ap and then essid otherwise scanning borks
|
||||
# Must do ap and then ssid otherwise scanning borks
|
||||
iwconfig "${IFACE}" ap off 2>/dev/null
|
||||
iwconfig "${IFACE}" essid off 2>/dev/null
|
||||
}
|
||||
|
||||
iwconfig_configure() {
|
||||
local x APS
|
||||
eval ESSID=\$ssid_${IFVAR}
|
||||
eval SSID=\$ssid_${IFVAR}
|
||||
|
||||
# Support old variable
|
||||
[ -z "${SSID}" ] && eval SSID=\$essid_${IFVAR}
|
||||
|
||||
# Setup ad-hoc mode?
|
||||
eval x=\$mode_${IFVAR}
|
||||
@ -588,14 +591,14 @@ iwconfig_configure() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Has an ESSID been forced?
|
||||
if [ -n "${ESSID}" ]; then
|
||||
# Has an SSID been forced?
|
||||
if [ -n "${SSID}" ]; then
|
||||
iwconfig_set_mode "${x}"
|
||||
iwconfig_associate && return 0
|
||||
[ "${ESSID}" = "any" ] && iwconfig_force_preferred && return 0
|
||||
[ "${SSID}" = "any" ] && iwconfig_force_preferred && return 0
|
||||
|
||||
eval ESSID=\$adhoc_essid_${IFVAR}
|
||||
if [ -n "${ESSID}" ]; then
|
||||
eval SSID=\$adhoc_ssid_${IFVAR}
|
||||
if [ -n "${SSID}" ]; then
|
||||
iwconfig_setup_specific ad-hoc
|
||||
return $?
|
||||
fi
|
||||
@ -688,14 +691,14 @@ iwconfig_pre_start() {
|
||||
fi
|
||||
|
||||
if iwconfig_configure ; then
|
||||
save_options "ESSID" "${ESSID}"
|
||||
save_options "SSID" "${SSID}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
eerror "Failed to configure wireless for ${IFACE}"
|
||||
iwconfig_defaults
|
||||
iwconfig "${IFACE}" txpower off 2>/dev/null
|
||||
unset ESSID ESSIDVAR
|
||||
unset SSID SSIDVAR
|
||||
_down
|
||||
return 1
|
||||
}
|
||||
|
@ -1,88 +0,0 @@
|
||||
# Copyright 2004-2007 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
macchanger_depend() {
|
||||
before macnet
|
||||
}
|
||||
|
||||
_config_vars="$_config_vars mac"
|
||||
|
||||
macchanger_pre_start() {
|
||||
# We don't change MAC addresses from background
|
||||
${IN_BACKGROUND} && return 0
|
||||
|
||||
local mac= opts=
|
||||
|
||||
eval mac=\$mac_${IFVAR}
|
||||
[ -z "${mac}" ] && return 0
|
||||
|
||||
_exists true || return 1
|
||||
|
||||
ebegin "Changing MAC address of ${IFACE}"
|
||||
|
||||
# The interface needs to be up for macchanger to work most of the time
|
||||
_down
|
||||
|
||||
mac=$(echo "${mac}" | sed -e 'y/ABCDEF/abcdef')
|
||||
case "${mac}" in
|
||||
# specific mac-addr, i wish there were a shorter way to specify this
|
||||
[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f])
|
||||
# We don't need macchanger to change to a specific mac address
|
||||
_set_mac_address "${mac}"
|
||||
if eend "$?" ; then
|
||||
mac=$(_get_mac_address)
|
||||
eindent
|
||||
einfo "changed to ${mac}"
|
||||
eoutdent
|
||||
return 0
|
||||
fi
|
||||
;;
|
||||
|
||||
# increment MAC address, default macchanger behavior
|
||||
increment) opts="${opts}" ;;
|
||||
|
||||
# randomize just the ending bytes
|
||||
random-ending) opts="${opts} -e" ;;
|
||||
|
||||
# keep the same kind of physical layer (eg fibre, copper)
|
||||
random-samekind) opts="${opts} -a" ;;
|
||||
|
||||
# randomize to any known vendor of any physical layer type
|
||||
random-anykind) opts="${opts} -A" ;;
|
||||
|
||||
# fully random bytes
|
||||
random-full|random) opts="${opts} -r" ;;
|
||||
|
||||
# default case is just to pass on all the options
|
||||
*) opts="${opts} ${mac}" ;;
|
||||
esac
|
||||
|
||||
if [ ! -x /sbin/macchanger ] ; then
|
||||
eerror "For changing MAC addresses, emerge net-analyzer/macchanger"
|
||||
return 1
|
||||
fi
|
||||
|
||||
mac=$(LC_ALL=C macchanger ${opts} "${IFACE}" \
|
||||
| sed -n -e 's/^Faked MAC:.*\<\(..:..:..:..:..:..\)\>.*/\1/p' )
|
||||
_up
|
||||
|
||||
# Sometimes the interface needs to be up ....
|
||||
if [ -z "${mac}" ] ; then
|
||||
mac=$(LC_ALL=C macchanger ${opts} "${IFACE}" \
|
||||
| sed -n -e 's/^Faked MAC:.*\<\(..:..:..:..:..:..\)\>.*/\1/p' )
|
||||
fi
|
||||
|
||||
if [ -z "${mac}" ] ; then
|
||||
eend 1 "Failed to set MAC address"
|
||||
return 1
|
||||
fi
|
||||
|
||||
eend 0
|
||||
eindent
|
||||
einfo "changed to" "${mac}"
|
||||
eoutdent
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# vim: set ts=4 :
|
@ -17,9 +17,9 @@ tuntap_pre_start() {
|
||||
|
||||
[ -z "${tuntap}" ] && return 0
|
||||
|
||||
if [ ! -a /dev/net/tun ] ; then
|
||||
if [ ! -e /dev/net/tun ] ; then
|
||||
modprobe tun && sleep 1
|
||||
if [ ! -a /dev/net/tun ] ; then
|
||||
if [ ! -e /dev/net/tun ] ; then
|
||||
eerror "TUN/TAP support is not present in this kernel"
|
||||
return 1
|
||||
fi
|
||||
@ -37,7 +37,7 @@ tuntap_pre_start() {
|
||||
eval opts=\$tunctl_${IFVAR}
|
||||
tunctl ${opts} -t "${IFACE}" >/dev/null
|
||||
fi
|
||||
eend $? && save_options tuntap "${tuntap}"
|
||||
eend $? && _up && save_options tuntap "${tuntap}"
|
||||
}
|
||||
|
||||
tuntap_post_stop() {
|
||||
|
@ -34,6 +34,7 @@ macchanger_pre_start() {
|
||||
eindent
|
||||
einfo "changed to ${mac}"
|
||||
eoutdent
|
||||
_up
|
||||
return 0
|
||||
fi
|
||||
;;
|
||||
|
@ -553,7 +553,7 @@ stop() {
|
||||
|
||||
[ -x /sbin/resolvconf ] && resolvconf -d "${IFACE}"
|
||||
|
||||
if type predown >/dev/null 2>/dev/null ; then
|
||||
if type postdown >/dev/null 2>/dev/null ; then
|
||||
ebegin "Running postdown"
|
||||
eindent
|
||||
postdown
|
||||
|
@ -113,10 +113,6 @@ $(LIBRCSO): $(LIBRCOBJS)
|
||||
$(CC) -fPIC -shared -Wl,-soname,$(LIBRCSO) -o $(LIBRCSO) $(LIBRCOBJS)
|
||||
ln -sf $(LIBRCSO) librc.so
|
||||
|
||||
splash: CFLAGS += -fPIC
|
||||
splash: splash.o
|
||||
$(CC) -fPIC -shared -Wl,-soname,splash.so -o splash.so splash.o
|
||||
|
||||
env-update: $(LIBEINFOSO) $(LIBRCSO) env-update.o
|
||||
|
||||
fstabinfo: $(LIBEINFOSO) fstabinfo.o
|
||||
|
@ -447,7 +447,10 @@ char **rc_get_list (char **list, const char *file)
|
||||
token = strsep (&p, "#");
|
||||
if (token && (strlen (token) > 1))
|
||||
{
|
||||
token[strlen (token) - 1] = 0;
|
||||
/* Stip the newline if present */
|
||||
if (token[strlen (token) - 1] == '\n')
|
||||
token[strlen (token) - 1] = 0;
|
||||
|
||||
list = rc_strlist_add (list, token);
|
||||
}
|
||||
}
|
||||
@ -745,9 +748,5 @@ char **rc_config_env (char **env)
|
||||
free (line);
|
||||
}
|
||||
|
||||
/* Set this var to ensure that things are POSIX, which makes scripts work
|
||||
on non GNU systems with less effort. */
|
||||
env = rc_strlist_add (env, "POSIXLY_CORRECT=1");
|
||||
|
||||
return (env);
|
||||
}
|
||||
|
@ -234,14 +234,7 @@ static void cleanup (void)
|
||||
|
||||
if (in_control ())
|
||||
{
|
||||
if (rc_service_state (applet, rc_service_starting))
|
||||
{
|
||||
if (rc_service_state (applet, rc_service_wasinactive))
|
||||
rc_mark_service (applet, rc_service_inactive);
|
||||
else
|
||||
rc_mark_service (applet, rc_service_stopped);
|
||||
}
|
||||
else if (rc_service_state (applet, rc_service_stopping))
|
||||
if (rc_service_state (applet, rc_service_stopping))
|
||||
{
|
||||
/* If the we're shutting down, do it cleanly */
|
||||
if ((softlevel &&
|
||||
@ -254,6 +247,13 @@ static void cleanup (void)
|
||||
else
|
||||
rc_mark_service (applet, rc_service_started);
|
||||
}
|
||||
else if (rc_service_state (applet, rc_service_starting))
|
||||
{
|
||||
if (rc_service_state (applet, rc_service_wasinactive))
|
||||
rc_mark_service (applet, rc_service_inactive);
|
||||
else
|
||||
rc_mark_service (applet, rc_service_stopped);
|
||||
}
|
||||
if (exclusive && rc_exists (exclusive))
|
||||
unlink (exclusive);
|
||||
}
|
||||
@ -778,7 +778,7 @@ static void svc_stop (const char *service, bool deps)
|
||||
if (rc_service_state (service, rc_service_wasinactive))
|
||||
rc_mark_service (service, rc_service_inactive);
|
||||
else
|
||||
rc_mark_service (service, rc_service_stopped);
|
||||
rc_mark_service (service, rc_service_started);
|
||||
eerrorx ("ERROR: %s failed to stop", applet);
|
||||
}
|
||||
|
||||
|
130
src/splash.c
130
src/splash.c
@ -1,130 +0,0 @@
|
||||
/*
|
||||
splash.c
|
||||
|
||||
Splash plugin for the Gentoo RC sytsem.
|
||||
splashutils needs to be re-written to support our new system.
|
||||
Until then, we provide this compatible module which calls the
|
||||
legacy bash scripts which is nasty. And slow.
|
||||
|
||||
For any themes that use scripts, such as the live-cd theme,
|
||||
they will have to source /sbin/splash-functions.sh themselves like so
|
||||
|
||||
if ! type splash >/dev/null 2>/dev/null ; then
|
||||
. /sbin/splash-functions.sh
|
||||
fi
|
||||
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <rc.h>
|
||||
|
||||
#ifndef LIB
|
||||
# define LIB "lib"
|
||||
#endif
|
||||
|
||||
#define SPLASH_CACHEDIR "/" LIB "/splash/cache"
|
||||
|
||||
#define SPLASH_CMD "bash -c 'export SOFTLEVEL='%s'; export BOOTLEVEL=${RC_BOOTLEVEL}; export DEFAULTLEVEL=${RC_DEFAULTLEVEL}; export svcdir=${RC_SVCDIR}; add_suffix() { echo \"$@\"; }; . /etc/init.d/functions.sh; . /sbin/splash-functions.sh; splash %s %s %s'"
|
||||
|
||||
int _splash_hook (rc_hook_t hook, const char *name);
|
||||
|
||||
static int _do_splash (const char *cmd, const char *arg1, const char *arg2)
|
||||
{
|
||||
char *c;
|
||||
int l;
|
||||
char *soft = getenv ("RC_SOFTLEVEL");
|
||||
|
||||
if (! cmd || ! soft)
|
||||
return (-1);
|
||||
|
||||
l = strlen (SPLASH_CMD) + strlen (soft) + strlen (cmd);
|
||||
if (arg1)
|
||||
l += strlen (arg1);
|
||||
if (arg2)
|
||||
l += strlen (arg2);
|
||||
c = malloc (sizeof (char *) * l);
|
||||
if (! c)
|
||||
return (-1);
|
||||
|
||||
snprintf (c, l, SPLASH_CMD,
|
||||
arg1 ? strcmp (arg1, RC_LEVEL_SYSINIT) == 0 ? RC_LEVEL_BOOT : soft : soft,
|
||||
cmd, arg1 ? arg1 : "", arg2 ? arg2 : "");
|
||||
l = system (c);
|
||||
free (c);
|
||||
return (l);
|
||||
}
|
||||
|
||||
int _splash_hook (rc_hook_t hook, const char *name)
|
||||
{
|
||||
switch (hook)
|
||||
{
|
||||
case rc_hook_runlevel_stop_in:
|
||||
if (strcmp (name, RC_LEVEL_SYSINIT) != 0)
|
||||
return (_do_splash ("rc_init", name, NULL));
|
||||
break;
|
||||
case rc_hook_runlevel_start_out:
|
||||
if (strcmp (name, RC_LEVEL_SYSINIT) == 0)
|
||||
return (_do_splash ("rc_init", name, NULL));
|
||||
else
|
||||
return (_do_splash ("rc_exit", name, NULL));
|
||||
default: ;
|
||||
}
|
||||
|
||||
/* We don't care about splash unless we're changing runlevels */
|
||||
if (! rc_runlevel_starting () &&
|
||||
! rc_runlevel_stopping ())
|
||||
return (0);
|
||||
|
||||
switch (hook)
|
||||
{
|
||||
case rc_hook_service_stop_in:
|
||||
/* We need to stop localmount from unmounting our cache dir.
|
||||
Luckily plugins can add to the unmount list. */
|
||||
if (name && strcmp (name, "localmount") == 0)
|
||||
{
|
||||
char *umounts = getenv ("RC_NO_UMOUNTS");
|
||||
char *new;
|
||||
int i = strlen (SPLASH_CACHEDIR) + 1;
|
||||
|
||||
if (umounts)
|
||||
i += strlen (umounts) + 1;
|
||||
|
||||
new = malloc (sizeof (char *) * i);
|
||||
if (new)
|
||||
{
|
||||
if (umounts)
|
||||
snprintf (new, i, "%s:%s", umounts, SPLASH_CACHEDIR);
|
||||
else
|
||||
snprintf (new, i, "%s", SPLASH_CACHEDIR);
|
||||
}
|
||||
|
||||
/* We unsetenv first as some libc's leak memory if we overwrite
|
||||
a var with a bigger value */
|
||||
if (umounts)
|
||||
unsetenv ("RC_NO_UMOUNTS");
|
||||
setenv ("RC_NO_UMOUNTS", new, 1);
|
||||
|
||||
free (new);
|
||||
}
|
||||
return (_do_splash ("svc_stop", name, NULL));
|
||||
case rc_hook_service_stop_out:
|
||||
if (rc_service_state (name, rc_service_stopped))
|
||||
return (_do_splash ("svc_stopped", name, "0"));
|
||||
else
|
||||
return (_do_splash ("svc_started", name, "1"));
|
||||
case rc_hook_service_start_in:
|
||||
return (_do_splash ("svc_start", name, NULL));
|
||||
case rc_hook_service_start_out:
|
||||
if (rc_service_state (name, rc_service_stopped))
|
||||
return (_do_splash ("svc_started", name, "1"));
|
||||
else
|
||||
return (_do_splash ("svc_started", name, "0"));
|
||||
default: ;
|
||||
}
|
||||
|
||||
return (0);
|
||||
}
|
Loading…
Reference in New Issue
Block a user