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
}
_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')

View File

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

View File

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

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
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() {

View File

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

View File

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

View File

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

View File

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

View File

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

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