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:
Roy Marples 2007-04-10 10:33:44 +00:00
parent c5ddc6ef74
commit 0c98067d57
11 changed files with 89 additions and 298 deletions

View File

@ -6,22 +6,6 @@ ifconfig_depend() {
provide interface 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() { _up() {
ifconfig "${IFACE}" up ifconfig "${IFACE}" up
} }
@ -54,6 +38,26 @@ _is_wireless() {
grep -Eq "^[[:space:]]*${IFACE}:[[:space:]]+" /proc/net/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() { _get_inet_address() {
set -- $(LC_ALL=C ifconfig "${IFACE}" | set -- $(LC_ALL=C ifconfig "${IFACE}" |
sed -n -e 's/.*inet addr:\([^ ]*\).*Mask:\([^ ]*\).*/\1 \2/p') sed -n -e 's/.*inet addr:\([^ ]*\).*Mask:\([^ ]*\).*/\1 \2/p')

View File

@ -7,21 +7,6 @@ iproute2_depend() {
after ifconfig 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() { _up() {
ip link set up dev "${IFACE}" ip link set up dev "${IFACE}"
@ -55,6 +40,26 @@ _is_wireless() {
grep -Eq "^[[:space:]]*${IFACE}:[[:space:]]+" /proc/net/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() { _get_inet_addresses() {
LC_ALL=C ip -family inet addr show "${IFACE}" | \ LC_ALL=C ip -family inet addr show "${IFACE}" | \
sed -n -e 's/.*inet \([^ ]*\).*/\1/p' sed -n -e 's/.*inet \([^ ]*\).*/\1/p'
@ -160,8 +165,9 @@ iproute2_pre_start() {
metric=1000 metric=1000
ebegin "Creating tunnel ${IFVAR}" ebegin "Creating tunnel ${IFVAR}"
ip tunnel add "${tunnel}" ip tunnel add ${tunnel} name "${IFACE}"
eend $? || return 1 eend $? || return 1
_up
fi fi
return 0 return 0

View File

@ -3,7 +3,7 @@
# Many thanks to all the people in the Gentoo forums for their ideas and # 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 # 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() { iwconfig_depend() {
program /sbin/iwconfig program /sbin/iwconfig
@ -155,8 +155,8 @@ iwconfig_setup_specific() {
fi fi
# Then set the SSID # Then set the SSID
if ! eval iwconfig "${IFACE}" essid "${SSID}" ; then if ! iwconfig "${IFACE}" essid "${SSID}" ; then
eerror "${IFACE} does not support setting SSID to \"${ESSID}\"" eerror "${IFACE} does not support setting SSID to \"${SSID}\""
return 1 return 1
fi fi
@ -187,7 +187,7 @@ iwconfig_wait_for_association() {
# Use sysfs if we can # Use sysfs if we can
if [ -e /sys/class/net/"${IFACE}"/carrier ] ; then if [ -e /sys/class/net/"${IFACE}"/carrier ] ; then
if [ "$(cat /sys/class/net/"${IFACE}"/carrier)" = "1" ] ; 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 :/ # prism54 drivers that always set their carrier on :/
[ -n "$(iwgetid --raw "${IFACE}")" ] && return 0 [ -n "$(iwgetid --raw "${IFACE}")" ] && return 0
fi fi
@ -220,7 +220,7 @@ iwconfig_associate() {
if [ "${SSID}" = "any" ]; then if [ "${SSID}" = "any" ]; then
iwconfig "${IFACE}" ap any 2>/dev/null iwconfig "${IFACE}" ap any 2>/dev/null
unset ESSIDVAR unset SSIDVAR
else else
SSIDVAR=$(_shell_var "${SSID}") SSIDVAR=$(_shell_var "${SSID}")
key="$(iwconfig_get_wep_key "${mac}")" key="$(iwconfig_get_wep_key "${mac}")"
@ -243,9 +243,9 @@ iwconfig_associate() {
[ "${key}" != "off" ] && w="$(iwconfig_get_wep_status "${iface}")" [ "${key}" != "off" ] && w="$(iwconfig_get_wep_status "${iface}")"
fi fi
if ! eval iwconfig "${IFACE}" essid "${SSID}" ; then if ! iwconfig "${IFACE}" essid "${SSID}" ; then
if [ "${SSID}" != "any" ] ; 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
fi fi
@ -315,7 +315,7 @@ iwconfig_scan() {
if [ -z "${scan}" ] ; then if [ -z "${scan}" ] ; then
ewarn "${iface} does not support scanning" ewarn "${iface} does not support scanning"
eoutdent eoutdent
eval x=\$adhoc_essid_${IFVAR} eval x=\$adhoc_ssid_${IFVAR}
[ -n "${x}" ] && return 0 [ -n "${x}" ] && return 0
if [ -n "${preferred_aps}" ] ; then if [ -n "${preferred_aps}" ] ; then
[ "${associate_order}" = "forcepreferred" ] || \ [ "${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 "or hardcode the SSID to \"any\" and let the driver find an Access Point"
eerror " ssid_${IFVAR}=\"any\"" eerror " ssid_${IFVAR}=\"any\""
eerror "or configure defaulting to Ad-Hoc when Managed fails" eerror "or configure defaulting to Ad-Hoc when Managed fails"
eerror " adhoc_essid_${IFVAR}=\"WLAN\"" eerror " adhoc_ssid_${IFVAR}=\"WLAN\""
eerror "or hardcode the ESSID against the interface (not recommended)" eerror "or hardcode the SSID against the interface (not recommended)"
eerror " essid_${IFVAR}=\"ESSID\"" eerror " ssid_${IFVAR}=\"SSID\""
return 1 return 1
fi fi
@ -507,13 +507,13 @@ iwconfig_force_preferred() {
} }
iwconfig_connect_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)" eval "$(_get_array preferred_aps)"
for essid in "$@"; do for ssid in "$@"; do
while [ ${i} -le ${APS} ] ; do while [ ${i} -le ${APS} ] ; do
eval e=\$SSID_${i} eval e=\$SSID_${i}
if [ "${e}" = "${essid}" ] ; then if [ "${e}" = "${ssid}" ] ; then
SSID=${e} SSID=${e}
eval mode=\$MODE_${i} eval mode=\$MODE_${i}
eval mac=\$MAC_${i} eval mac=\$MAC_${i}
@ -531,13 +531,13 @@ iwconfig_connect_preferred() {
} }
iwconfig_connect_not_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 while [ ${i} -le ${APS} ] ; do
eval e=\$SSID_${i} eval e=\$SSID_${i}
eval "$(_get_array preferred_aps)" eval "$(_get_array preferred_aps)"
for essid in "$@" ; do for ssid in "$@" ; do
if [ "${e}" = "${essid}" ] ; then if [ "${e}" = "${ssid}" ] ; then
pref=true pref=true
break break
fi fi
@ -566,14 +566,17 @@ iwconfig_defaults() {
done done
# Release the AP forced # 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}" ap off 2>/dev/null
iwconfig "${IFACE}" essid off 2>/dev/null iwconfig "${IFACE}" essid off 2>/dev/null
} }
iwconfig_configure() { iwconfig_configure() {
local x APS local x APS
eval ESSID=\$ssid_${IFVAR} eval SSID=\$ssid_${IFVAR}
# Support old variable
[ -z "${SSID}" ] && eval SSID=\$essid_${IFVAR}
# Setup ad-hoc mode? # Setup ad-hoc mode?
eval x=\$mode_${IFVAR} eval x=\$mode_${IFVAR}
@ -588,14 +591,14 @@ iwconfig_configure() {
return 1 return 1
fi fi
# Has an ESSID been forced? # Has an SSID been forced?
if [ -n "${ESSID}" ]; then if [ -n "${SSID}" ]; then
iwconfig_set_mode "${x}" iwconfig_set_mode "${x}"
iwconfig_associate && return 0 iwconfig_associate && return 0
[ "${ESSID}" = "any" ] && iwconfig_force_preferred && return 0 [ "${SSID}" = "any" ] && iwconfig_force_preferred && return 0
eval ESSID=\$adhoc_essid_${IFVAR} eval SSID=\$adhoc_ssid_${IFVAR}
if [ -n "${ESSID}" ]; then if [ -n "${SSID}" ]; then
iwconfig_setup_specific ad-hoc iwconfig_setup_specific ad-hoc
return $? return $?
fi fi
@ -688,14 +691,14 @@ iwconfig_pre_start() {
fi fi
if iwconfig_configure ; then if iwconfig_configure ; then
save_options "ESSID" "${ESSID}" save_options "SSID" "${SSID}"
return 0 return 0
fi fi
eerror "Failed to configure wireless for ${IFACE}" eerror "Failed to configure wireless for ${IFACE}"
iwconfig_defaults iwconfig_defaults
iwconfig "${IFACE}" txpower off 2>/dev/null iwconfig "${IFACE}" txpower off 2>/dev/null
unset ESSID ESSIDVAR unset SSID SSIDVAR
_down _down
return 1 return 1
} }

View File

@ -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 :

View File

@ -17,9 +17,9 @@ tuntap_pre_start() {
[ -z "${tuntap}" ] && return 0 [ -z "${tuntap}" ] && return 0
if [ ! -a /dev/net/tun ] ; then if [ ! -e /dev/net/tun ] ; then
modprobe tun && sleep 1 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" eerror "TUN/TAP support is not present in this kernel"
return 1 return 1
fi fi
@ -37,7 +37,7 @@ tuntap_pre_start() {
eval opts=\$tunctl_${IFVAR} eval opts=\$tunctl_${IFVAR}
tunctl ${opts} -t "${IFACE}" >/dev/null tunctl ${opts} -t "${IFACE}" >/dev/null
fi fi
eend $? && save_options tuntap "${tuntap}" eend $? && _up && save_options tuntap "${tuntap}"
} }
tuntap_post_stop() { tuntap_post_stop() {

View File

@ -34,6 +34,7 @@ macchanger_pre_start() {
eindent eindent
einfo "changed to ${mac}" einfo "changed to ${mac}"
eoutdent eoutdent
_up
return 0 return 0
fi fi
;; ;;

View File

@ -553,7 +553,7 @@ stop() {
[ -x /sbin/resolvconf ] && resolvconf -d "${IFACE}" [ -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" ebegin "Running postdown"
eindent eindent
postdown postdown

View File

@ -113,10 +113,6 @@ $(LIBRCSO): $(LIBRCOBJS)
$(CC) -fPIC -shared -Wl,-soname,$(LIBRCSO) -o $(LIBRCSO) $(LIBRCOBJS) $(CC) -fPIC -shared -Wl,-soname,$(LIBRCSO) -o $(LIBRCSO) $(LIBRCOBJS)
ln -sf $(LIBRCSO) librc.so 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 env-update: $(LIBEINFOSO) $(LIBRCSO) env-update.o
fstabinfo: $(LIBEINFOSO) fstabinfo.o fstabinfo: $(LIBEINFOSO) fstabinfo.o

View File

@ -447,7 +447,10 @@ char **rc_get_list (char **list, const char *file)
token = strsep (&p, "#"); token = strsep (&p, "#");
if (token && (strlen (token) > 1)) 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); list = rc_strlist_add (list, token);
} }
} }
@ -745,9 +748,5 @@ char **rc_config_env (char **env)
free (line); 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); return (env);
} }

View File

@ -234,14 +234,7 @@ static void cleanup (void)
if (in_control ()) if (in_control ())
{ {
if (rc_service_state (applet, rc_service_starting)) if (rc_service_state (applet, rc_service_stopping))
{
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 the we're shutting down, do it cleanly */ /* If the we're shutting down, do it cleanly */
if ((softlevel && if ((softlevel &&
@ -254,6 +247,13 @@ static void cleanup (void)
else else
rc_mark_service (applet, rc_service_started); 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)) if (exclusive && rc_exists (exclusive))
unlink (exclusive); unlink (exclusive);
} }
@ -778,7 +778,7 @@ static void svc_stop (const char *service, bool deps)
if (rc_service_state (service, rc_service_wasinactive)) if (rc_service_state (service, rc_service_wasinactive))
rc_mark_service (service, rc_service_inactive); rc_mark_service (service, rc_service_inactive);
else else
rc_mark_service (service, rc_service_stopped); rc_mark_service (service, rc_service_started);
eerrorx ("ERROR: %s failed to stop", applet); eerrorx ("ERROR: %s failed to stop", applet);
} }

View File

@ -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);
}