From 69bf2d9f5040293c67d41224db35f7b54c5c45b8 Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Tue, 12 Apr 2011 09:01:39 +0000 Subject: main/openrc: upgrgadee to 0.8.0 --- ...v1-when-rc_sys-variable-is-defined-but-em.patch | 27 - main/openrc/APKBUILD | 12 +- main/openrc/openrc-0.7.0-git_20110222.patch | 3879 -------------------- 3 files changed, 4 insertions(+), 3914 deletions(-) delete mode 100644 main/openrc/0001-Use-rc_sys_v1-when-rc_sys-variable-is-defined-but-em.patch delete mode 100644 main/openrc/openrc-0.7.0-git_20110222.patch (limited to 'main/openrc') diff --git a/main/openrc/0001-Use-rc_sys_v1-when-rc_sys-variable-is-defined-but-em.patch b/main/openrc/0001-Use-rc_sys_v1-when-rc_sys-variable-is-defined-but-em.patch deleted file mode 100644 index d0a3547016..0000000000 --- a/main/openrc/0001-Use-rc_sys_v1-when-rc_sys-variable-is-defined-but-em.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 9b7f57c47e1a5c73d22a0f5bff132c702e6f352b Mon Sep 17 00:00:00 2001 -From: Natanael Copa -Date: Thu, 3 Mar 2011 18:16:50 +0000 -Subject: [PATCH] Use rc_sys_v1() when rc_sys variable is defined but empty. - -This makes current vserver boot ---- - src/librc/librc.c | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -diff --git a/src/librc/librc.c b/src/librc/librc.c -index e134547..8292f6e 100644 ---- a/src/librc/librc.c -+++ b/src/librc/librc.c -@@ -292,7 +292,8 @@ librc_hidden_def(rc_sys_v1) - const char * - rc_sys(void) - { -- if (rc_conf_value("rc_sys")) { -+ char *val = rc_conf_value("rc_sys"); -+ if (val && *val) { - return rc_sys_v2(); - } else { - return rc_sys_v1(); --- -1.7.4.1 - diff --git a/main/openrc/APKBUILD b/main/openrc/APKBUILD index fbdf9de2e5..e71772994d 100644 --- a/main/openrc/APKBUILD +++ b/main/openrc/APKBUILD @@ -1,18 +1,16 @@ # Maintainer: Natanael Copa pkgname=openrc -pkgver=0.7.0_git20110222 +pkgver=0.8.0 _ver=${pkgver/_git*/} -pkgrel=1 +pkgrel=0 pkgdesc="OpenRC manages the services, startup and shutdown of a host" -url="http://roy.marples.name/openrc" +url="http://git.overlays.gentoo.org/gitweb/?p=proj/openrc.git" arch="all" license='BSD-2' depends="" subpackages="$pkgname-doc $pkgname-dev" install="$pkgname.post-install $pkgname.post-upgrade" source="http://distfiles.gentoo.org/distfiles/$pkgname-$_ver.tar.bz2 - openrc-0.7.0-git_20110222.patch - 0001-Use-rc_sys_v1-when-rc_sys-variable-is-defined-but-em.patch openrc-0.4.3-mkmntdirs.patch 0001-Force-root-be-rw-before-localmount.patch @@ -64,9 +62,7 @@ package() { install -Dm644 ../local.start "$pkgdir"/etc/conf.d/local.start } -md5sums="80efd9dd83d4713ddfb7e41a6433cc9c openrc-0.7.0.tar.bz2 -85b667dcadf8aab78384bc942babc89a openrc-0.7.0-git_20110222.patch -c3dfd1a0ee9e88a0d491d815ca634bda 0001-Use-rc_sys_v1-when-rc_sys-variable-is-defined-but-em.patch +md5sums="54978ba3a1ff9fb8f04aae422c0416af openrc-0.8.0.tar.bz2 8c2c1c2ee0509b63966b7187a2079f4b openrc-0.4.3-mkmntdirs.patch 4fd036ff07ed9ad7fb76af6a3ffc0695 0001-Force-root-be-rw-before-localmount.patch fb8baeaf32f4d53491312675f28a9939 0001-fsck-add-C0-and-T-options-unless-fsck-is-busybox.patch diff --git a/main/openrc/openrc-0.7.0-git_20110222.patch b/main/openrc/openrc-0.7.0-git_20110222.patch deleted file mode 100644 index 8a1711b596..0000000000 --- a/main/openrc/openrc-0.7.0-git_20110222.patch +++ /dev/null @@ -1,3879 +0,0 @@ -diff --git a/FEATURE-REMOVAL-SCHEDULE b/FEATURE-REMOVAL-SCHEDULE -new file mode 100644 -index 0000000..50c81f8 ---- /dev/null -+++ b/FEATURE-REMOVAL-SCHEDULE -@@ -0,0 +1,70 @@ -+The following is a list of files and features that are going to be removed in -+the source tree. Every entry should contain what exactly is going away, why it -+is happening, and who is going to be doing the work. When the feature is -+removed, it should also be removed from this file. -+ -+--------------------------- -+ -+What: rc_sys automatic detection code -+ - Functions for removal: rc_sys_v1, rc_sys_v2 -+ -+When: 2011/03/01 -+ -+Why: The original automatic sub-system detection is flawed in that it cannot -+ safely detect some variables (Using cgroups confused it to think you were -+ using LXC, and Prefix cannot be detect by definition). Also, almost all of -+ the detection requires that /proc is available and readable. During early -+ boot, /proc may not be mounted yet, leading to mis-detection. The readable -+ condition can also fail under some hardened kernels when running as an -+ unprivileged user. -+ -+ The new rc_sys_v2 function uses the rc_sys variable from rc.conf. After -+ the removal, the contents of the rc_sys_v2 function will move into the -+ rc_sys function. -+ -+Who: Robin H. Johnson -+ -+--------------------------- -+ -+What: oldnet ADSL rp-pppoe mode -+ -+When: undecided -+ -+Why: Replaced by the oldnet PPP module -+ -+Who: Robin H. Johnson -+ -+--------------------------- -+ -+What: oldnet /etc/conf.d/wireless -+ -+When: undecided -+ -+Why: All configuration moved to /etc/conf.d/net -+ -+Who: Robin H. Johnson -+ -+--------------------------- -+ -+What: Service pause action -+ -+When: Removed already, compatbility warning in place. -+ -+Why: ... -+ -+Who: -+ -+--------------------------- -+ -+What: Service --startas, --chuid , --oknodo -+ -+When: undecided -+ -+Why: Obsolete or replaced by other options. -+ --startas => use --name or --exec -+ --chuid => use --user -+ --oknodo => ignore return code instead -+ -+Who: -+ -+--------------------------- -diff --git a/Makefile b/Makefile -index 8f9cc95..dd427d0 100644 ---- a/Makefile -+++ b/Makefile -@@ -4,23 +4,18 @@ - - include Makefile.inc - --SUBDIR= conf.d etc init.d man scripts sh src -+SUBDIR= conf.d etc init.d local.d man scripts sh src - - # Build our old net foo or not --_OLDNET_SH= case "${MKOLDNET}" in \ -- [Yy][Ee][Ss]) echo "net doc";; \ -- *) echo "";; \ -- esac --_OLDNET!= ${_OLDNET_SH} --SUBDIR+= ${_OLDNET}$(shell ${_OLDNET_SH}) -+ifeq (${MKOLDNET},yes) -+SUBDIR+= net doc -+endif - - # Build pkgconfig or not --_PKGCONFIG_SH= case "${MKPKGCONFIG}" in \ -- [Yy][Ee][Ss]|"") echo "pkgconfig";; \ -- *) echo "";; \ -- esac --_PKGCONFIG!= ${_PKGCONFIG_SH} --SUBDIR+= ${_PKGCONFIG}$(shell ${_PKGCONFIG_SH}) -+MKPKGCONFIG?= yes -+ifeq (${MKPKGCONFIG},yes) -+SUBDIR+= pkgconfig -+endif - - # We need to ensure that runlevels is done last - SUBDIR+= runlevels -diff --git a/README b/README -index 07f181f..2a2eac3 100644 ---- a/README -+++ b/README -@@ -4,7 +4,7 @@ OpenRC README - Installation - ------------ - make install --Yup, that simple. Works with GNU make and BSD make. -+Yup, that simple. Works with GNU make. - - You may wish to tweak the installation with the below arguments - PROGLDFLAGS=-static -@@ -12,6 +12,7 @@ LIBNAME=lib64 - DESTDIR=/tmp/openrc-image - MKPAM=pam - MKPKGCONFIG=no -+MKSELINUX=yes - MKTERMCAP=ncurses - MKTERMCAP=termcap - MKOLDNET=yes -diff --git a/README.net b/README.net -deleted file mode 100644 -index 41db1c5..0000000 ---- a/README.net -+++ /dev/null -@@ -1,36 +0,0 @@ --OpenRC Network Ideals ----------------------- -- --The new style networking for OpenRC is very simplistic - provide a basic means --of configuring static interface address and routes whilst allowing the --possibility to run any command at any point. -- --In a nutshell, init.d/network is a wrapper around ifconfig(8) and --init.d/staticroute is wrapper around route(8). -- --In the Perfect World (TM) ifconfig should be able to configure everything --about the interface easily * . The BSD family almost get this right and Linux --epically fails. -- --* Only static configuration, including link setup. --For dynamic, static, IPv4LL, arping and per ssid IPv4 setup dhcpcd-5.x --provides your needs. -- --It fails because there are many tools to do the same job and often have --vastly different syntax where they could be similar. In other words, there --is no coherence. -- --OpenRC-0.4.x and older (inc Gentoo baselayout-1) had a collection of scripts --for each tool and allowed a script per interface. Over the years, this design --has proven very hard to maintain as each user has their own idea of how --things should work. Also, there were (and still are) race conditions. -- --So where do we go from here? --Well, it's possible to use the new network scripts using the tools --currently available. It's just harder as you have to know them and their --documentation can be lacking at times. --The correct end goal is a BSD style ifconfig tool. --I've started work on it, but the project has stalled somewhat. --It's display only right now and the source is not yet publicly available. --If you have the skills and share the vision then contact me privately and --we'll take it from there. -diff --git a/README.newnet b/README.newnet -new file mode 100644 -index 0000000..2e157e2 ---- /dev/null -+++ b/README.newnet -@@ -0,0 +1,40 @@ -+The following applies only to the newnet stack, which is not presently -+maintained in OpenRC. The oldnet stack is maintained instead. -+- Robin H. Johnson , 2011/02/21 -+ -+OpenRC Network Ideals -+--------------------- -+ -+The new style networking for OpenRC is very simplistic - provide a basic means -+of configuring static interface address and routes whilst allowing the -+possibility to run any command at any point. -+ -+In a nutshell, init.d/network is a wrapper around ifconfig(8) and -+init.d/staticroute is wrapper around route(8). -+ -+In the Perfect World (TM) ifconfig should be able to configure everything -+about the interface easily * . The BSD family almost get this right and Linux -+epically fails. -+ -+* Only static configuration, including link setup. -+For dynamic, static, IPv4LL, arping and per ssid IPv4 setup dhcpcd-5.x -+provides your needs. -+ -+It fails because there are many tools to do the same job and often have -+vastly different syntax where they could be similar. In other words, there -+is no coherence. -+ -+OpenRC-0.4.x and older (inc Gentoo baselayout-1) had a collection of scripts -+for each tool and allowed a script per interface. Over the years, this design -+has proven very hard to maintain as each user has their own idea of how -+things should work. Also, there were (and still are) race conditions. -+ -+So where do we go from here? -+Well, it's possible to use the new network scripts using the tools -+currently available. It's just harder as you have to know them and their -+documentation can be lacking at times. -+The correct end goal is a BSD style ifconfig tool. -+I've started work on it, but the project has stalled somewhat. -+It's display only right now and the source is not yet publicly available. -+If you have the skills and share the vision then contact me privately and -+we'll take it from there. -diff --git a/STYLE b/STYLE -new file mode 100644 -index 0000000..f1ae5c1 ---- /dev/null -+++ b/STYLE -@@ -0,0 +1,34 @@ -+This is the openrc style manual. It governs the coding style of all code -+in this repository. Follow it. Contact openrc@gentoo.org for any questions -+or fixes you might notice. -+ -+########## -+# C CODE # -+########## -+ -+The BSD Kernel Normal Form (KNF) style is used: -+ http://en.wikipedia.org/wiki/Indent_style#BSD_KNF_style -+Basically, it's like K&R/LKML, but wrapped lines that are indented use 4 spaces. -+ -+Highlights: -+ - no trailing whitespace -+ - indented code use tabs (not line wrapped) -+ - cuddle the braces (except for functions) -+ - space after native statements and before paren (for/if/while/...) -+ - no space between function and paren -+ - pointer asterisk cuddles the variable, not the type -+ -+void foo(int c) -+{ -+ int ret = 0; -+ -+ if (c > 1000) -+ return; -+ -+ while (c--) { -+ bar(c); -+ ret++; -+ } -+ -+ return ret; -+} -diff --git a/TODO b/TODO -index e008fca..4309aa0 100644 ---- a/TODO -+++ b/TODO -@@ -3,3 +3,5 @@ - - add support somehow for optional translations - - - oldnet[bridging]: Review setting of bridge configuration on dynamic interface add -+ -+- Document rc-depend binary. -diff --git a/conf.d/Makefile b/conf.d/Makefile -index 034dc74..374bfdb 100644 ---- a/conf.d/Makefile -+++ b/conf.d/Makefile -@@ -1,5 +1,5 @@ - DIR= ${CONFDIR} --CONF= bootmisc fsck hostname local localmount network staticroute urandom -+CONF= bootmisc fsck hostname localmount network staticroute urandom - - TARGETS+= network staticroute - CLEANFILES+= network staticroute -diff --git a/conf.d/hwclock b/conf.d/hwclock -index 5321ba1..4e66ff9 100644 ---- a/conf.d/hwclock -+++ b/conf.d/hwclock -@@ -9,6 +9,14 @@ clock="UTC" - # You normally don't need to do this if you run a ntp daemon. - clock_systohc="NO" - -+# If you want to set the system time to the current hardware clock -+# during bootup, then say "YES" here. You do not need this if you are -+# running a modern kernel with CONFIG_RTC_HCTOSYS set to y. -+# Also, be aware that if you set this to "NO", the system time will -+# never be saved to the hardware clock unless you set -+# clock_systohc="YES" above. -+clock_hctosys="YES" -+ - # If you wish to pass any other arguments to hwclock during bootup, - # you may do so here. Alpha users may wish to use --arc or --srm here. - clock_args="" -diff --git a/conf.d/local b/conf.d/local -deleted file mode 100644 -index 97dbbcc..0000000 ---- a/conf.d/local -+++ /dev/null -@@ -1,18 +0,0 @@ --# Here is where you can put anything you need to start --# that there is not an init script for. -- --local_start() { -- # This is a good place to load any misc programs -- # on startup (use &>/dev/null to hide output) -- -- # We should always return 0 -- return 0 --} -- --local_stop() { -- # This is a good place to unload any misc. -- # programs you started above. -- -- # We should always return 0 -- return 0 --} -diff --git a/doc/net.example.BSD.in b/doc/net.example.BSD.in -index 977011e..287c644 100644 ---- a/doc/net.example.BSD.in -+++ b/doc/net.example.BSD.in -@@ -23,7 +23,7 @@ - # We now support modular networking scripts which means we can easily - # add support for new interface types and modules while keeping - # compatibility with existing ones. --# -+# - # Modules load by default if the package they need is installed. If - # you specify a module here that doesn't have its package installed - # then you get an error stating which package you need to install. -@@ -212,7 +212,7 @@ - # not find them in a scan - # "forcepreferredonly" means it forcibly connects to the APs in order and - # does not bother to scan --# "forceany" does the same as forcepreferred + connects to any other -+# "forceany" does the same as forcepreferred + connects to any other - # available AP - # Default is "any" - #associate_order="any" -@@ -266,13 +266,13 @@ - # won't have associated then) - - # If you're using anything else to configure wireless on your interface AND --# you have installed wpa_supplicant, you need to disable wpa_supplicant -+# you have installed wpa_supplicant, you need to disable wpa_supplicant - #modules="!iwconfig !wpa_supplicant" - #or - #modules="!wireless" - - ############################################################################## --# WIRELESS SSID IN VARIABLES -+# WIRELESS SSID IN VARIABLES - ############################################################################## - # Remember to change SSID to your SSID. - # Say that your SSID is My NET - the line -@@ -368,7 +368,7 @@ - - ############################################################################## - # ADVANCED CONFIGURATION --# -+# - # Four functions can be defined which will be called surrounding the - # start/stop operations. The functions are called with the interface - # name first so that one function can control multiple adapters. An extra two -diff --git a/doc/net.example.Linux.in b/doc/net.example.Linux.in -index 42e5477..69c9ba6 100644 ---- a/doc/net.example.Linux.in -+++ b/doc/net.example.Linux.in -@@ -24,7 +24,7 @@ - # We now support modular networking scripts which means we can easily - # add support for new interface types and modules while keeping - # compatibility with existing ones. --# -+# - # Modules load by default if the package they need is installed. If - # you specify a module here that doesn't have its package installed - # then you get an error stating which package you need to install. -@@ -49,7 +49,7 @@ - - ############################################################################## - # INTERFACE HANDLERS --# -+# - # We provide two interface handlers presently: ifconfig and iproute2. - # You need one of these to do any kind of network configuration. - # For ifconfig support, emerge sys-apps/net-tools -@@ -297,7 +297,7 @@ - # Surround each SSID with the " character and separate them with a space - # If the first SSID isn't found then it moves onto the next - # If this isn't defined then it connects to the first one found --#preferred_aps="SSID1 SSID2" -+#preferred_aps="SSID1 SSID2" - - # You can also define a preferred_aps list per interface - #preferred_aps_eth0="SSID3 SSID4" -@@ -371,13 +371,13 @@ - # won't have associated then) - - # If you're using anything else to configure wireless on your interface AND --# you have installed wpa_supplicant, you need to disable wpa_supplicant -+# you have installed wpa_supplicant, you need to disable wpa_supplicant - #modules="!iwconfig !wpa_supplicant" - #or - #modules="!wireless" - - ############################################################################## --# WIRELESS SSID IN VARIABLES -+# WIRELESS SSID IN VARIABLES - ############################################################################## - # Remember to change SSID to your SSID. - # Say that your SSID is My NET - the line -@@ -421,7 +421,7 @@ - # Notes: - # - All clients send the current hostname to the DHCP server by default - # - dhcpcd does not daemonize when the lease time is infinite --# - udhcp-0.9.3-r3 and earlier do not support getting NTP servers -+# - udhcp-0.9.3-r3 and earlier do not support getting NTP servers - # - pump does not support getting NIS servers - # - DHCP tends to erase any existing device information - so add - # static addresses after dhcp if you need them -@@ -467,7 +467,7 @@ - #fallback_eth0="apipa" - - #----------------------------------------------------------------------------- --# ARPING Gateway configuration -+# ARPING Gateway configuration - # and - # Automatic Private IP Addressing (APIPA) - # For arpingnet / apipa support, emerge net-misc/iputils or net-analyzer/arping -@@ -527,7 +527,8 @@ - - #----------------------------------------------------------------------------- - # VLAN (802.1q support) --# For VLAN support, emerge net-misc/vconfig -+# For VLAN support, emerge sys-apps/iproute2 -+# The old vconfig based VLAN support is no longer available. - - # Specify the VLAN numbers for the interface like so - # Please ensure your VLAN IDs are NOT zero-padded -@@ -537,10 +538,17 @@ - # need it up. - #config_eth0="null" - --# You can also configure the VLAN - see for vconfig man page for more details --#vconfig_eth0="set_name_type VLAN_PLUS_VID_NO_PAD" --#vconfig_vlan1="set_flag 1 --#set_egress_map 2 6" -+# You can also configure the VLAN - see for ip man page for more details -+# To change the vlan interface name. If not set, the standard "iface.vlanid" -+# will be used -+#vlan1_name="vlan1" -+#vlan2_name="eth0.2" -+# Set the vlan flags -+#vlan1_flags="reorder_hdr off gvrp on loose_binding on" -+# Configure in/egress maps -+#vlan1_ingress="2:6 3:5" -+#vlan1_egress="1:2" -+ - #config_vlan1="172.16.3.1/23" - #config_vlan2="172.16.2.1/23" - -@@ -553,8 +561,7 @@ - # This means you do not need to create init scripts in /etc/init.d for each - # vlan, you must need to create one for the physical interface. - # If you wish to control the configuration of each vlan through a separate --# script, or wish to rename the vlan interface to something that vconfig --# cannot then you need to do this. -+# script then you need to do this. - #vlan_start_eth0="no" - - # If you do the above then you may want to depend on eth0 like so -@@ -582,7 +589,7 @@ - - - #----------------------------------------------------------------------------- --# Classical IP over ATM -+# Classical IP over ATM - # For CLIP support emerge net-dialup/linux-atm - - # Ensure that you have /etc/atmsigd.conf setup correctly -@@ -620,7 +627,7 @@ - # - # Here you should specify what pppd plugins you want to use - # Available plugins are: pppoe, pppoa, capi, dhcpc, minconn, radius, --# radattr, radrealms and winbind -+# radattr, radrealms and winbind - #plugins_ppp0="pppoe" # Required plugin for PPPoE - #plugins_ppp0="pppoa vc-encaps" # Required plugin for PPPoA with an option - #plugins_ppp0="capi" # Required plugin for ISDN -@@ -660,7 +667,7 @@ - # lcp-echo-interval 15 # Send a LCP echo every 15 seconds - # lcp-echo-failure 3 # Make peer dead after 3 consecutive - # # echo-requests --# -+# - # Compression options - use these to completely disable compression - # noaccomp noccp nobsdcomp nodeflate nopcomp novj novjccomp - # -@@ -793,7 +800,7 @@ - # empty value variable is fine, but at least one of them must be set: - # brctl_IFVAR - --# You need to configure the ports to null values so dhcp does not get started -+# You need to configure the ports to null values so dhcp does not get started - #config_eth0="null" - #config_eth1="null" - -@@ -820,7 +827,7 @@ - #hairpin_mode_eth0="1" - - #----------------------------------------------------------------------------- --# RFC 2684 Bridge Support -+# RFC 2684 Bridge Support - # For RFC 2684 bridge support emerge net-misc/br2684ctl - - # Interface names have to be of the form nas0, nas1, nas2, etc. -@@ -973,9 +980,75 @@ - #ifplugd_eth0="--api-mode=wlan" - # man ifplugd for more options - -+#----------------------------------------------------------------------------- -+# Interface hardware tuning & configuration via ethtool -+# If you need to change explicit hardware settings on your network card prior -+# to bringing the interface up, the following is available. -+# -+# For a full listing of settings, please consulting ethtool(8) and the output -+# of "ethtool --help". -+# -+# Multiple entries (seperated by newlines) are supported in all of the -+# variables as some settings cannot be changed at the same time. -+# -+# Valid variable name fragments: change pause coalesce ring offload -+# change_eeprom identify nfc flash rxfh_indir ntuple -+ -+# Set Wake-On-Lan to listen for SecureOn MagicPacket(tm), the message level to -+# notify us of WOL changes, and the SecureOn password to 'DE:AD:BE:EF:CA:FE'. -+#ethtool_change_eth0="wol gs -+#msglvl wol on -+#sopass DE:AD:BE:EF:CA:FE" -+ -+# Disable pause auto-negotiation and explicitly enable RX and TX pause. -+#ethtool_pause_eth0="autoneg off -+#rx on tx on" -+ -+# Enasble adaptive RX and TX coalescing -+#ethtool_coalesce_eth0="adaptive-rx on adaptive-tx on" -+ -+# Change ring buffer settings -+#ethtool_ring_eth0="" -+ -+# Enable all offload settings -+#ethtool_offload_eth0="rx on tx on sg on tso on ufo on gso on gro on lro on" -+ -+# Change specific bytes in the EEPROM -+#ethtool_change_eeprom_eth0="" -+ -+# Run the identify sequence on the interface for 1 second (does not return until completion) -+#ethtool_identify_eth0="1" -+ -+# Configure receive network flow classification -+#ethtool_nfc_eth0=" -+#rx-flow-hash tcp4 f -+#rx-flow-hash udp4 s" -+ -+# Flash firmware to all regions -+#ethtool_flash_eth0="/some/path/firmware1 0" -+ -+# Flash firmware to region 1 -+#ethtool_flash_eth0="/some/path/firmware2 1" -+ -+# Set receive flow hash indirection table for even balancing between N receive queues -+#ethtool_rxfh_indir_eth0="equal 4" -+ -+# Configure Rx ntuple filters and actions -+#ethtool_ntuple_eth0="" -+ -+# Additionally, there is a special control variable, if you need to change the -+# order of option processing. The default order is: -+# flash change-eeprom change pause coalesce ring offload identify nfc rxfh-indir ntuple -+ -+# Set global order to default -+#ethtool_order="flash change-eeprom change pause coalesce ring offload identify nfc rxfh-indir ntuple" -+ -+# Hypothetical network card that requires a change-eeprom toggle to enable flashing -+#ethtool_order_eth0="change-eeprom flash change pause coalesce ring offload nfc rxfh-indir ntuple" -+ - ############################################################################## - # ADVANCED CONFIGURATION --# -+# - # Four functions can be defined which will be called surrounding the - # start/stop operations. The functions are called with the interface - # name first so that one function can control multiple adapters. An extra two -@@ -1001,7 +1074,7 @@ - # if mii-tool "${IFACE}" 2> /dev/null | grep -q 'no link'; then - # ewarn "No link on ${IFACE}, aborting configuration" - # return 1 --# fi -+# fi - # - # # Test for link on the interface prior to bringing it up. This - # # only works on some network adapters and requires the ethtool -diff --git a/etc/rc.conf.FreeBSD b/etc/rc.conf.FreeBSD -index 5682e1d..800c6cf 100644 ---- a/etc/rc.conf.FreeBSD -+++ b/etc/rc.conf.FreeBSD -@@ -3,6 +3,10 @@ - # "jail" - FreeBSD jails - # "prefix" - Prefix - # If unset, the old automagic detection code will be triggered. Said old code --# is deprecated and be removed not later than 2010/03/01. -+# is deprecated and will be removed not later than 2011/03/01. -+# -+# This should be set to the value representing what environment this file is -+# PRESENTLY in, not what virtualization the environment is capable of. -+# See the OpenRC migration guide for more details. - rc_sys="" - -diff --git a/etc/rc.conf.Linux b/etc/rc.conf.Linux -index 001e9c0..b110a81 100644 ---- a/etc/rc.conf.Linux -+++ b/etc/rc.conf.Linux -@@ -8,7 +8,11 @@ - # "xen0" - Xen0 Domain - # "xenU" - XenU Domain - # If unset, the old automagic detection code will be triggered. Said old code --# is deprecated and be removed not later than 2010/03/01. -+# is deprecated and will be removed not later than 2011/03/01. -+# -+# This should be set to the value representing what environment this file is -+# PRESENTLY in, not what virtualization the environment is capable of. -+# See the OpenRC migration guide for more details. - rc_sys="" - - ############################################################################## -diff --git a/etc/rc.conf.NetBSD b/etc/rc.conf.NetBSD -index 25d86a4..b29000b 100644 ---- a/etc/rc.conf.NetBSD -+++ b/etc/rc.conf.NetBSD -@@ -4,6 +4,10 @@ - # "xen0" - Xen0 Domain - # "xenU" - XenU Domain - # If unset, the old automagic detection code will be triggered. Said old code --# is deprecated and be removed not later than 2010/03/01. -+# is deprecated and will be removed not later than 2011/03/01. -+# -+# This should be set to the value representing what environment this file is -+# PRESENTLY in, not what virtualization the environment is capable of. -+# See the OpenRC migration guide for more details. - rc_sys="" - -diff --git a/etc/rc.conf.in b/etc/rc.conf.in -index 6aa3613..3c1210b 100644 ---- a/etc/rc.conf.in -+++ b/etc/rc.conf.in -@@ -95,7 +95,7 @@ - # We can set some things on a per service basis, like the nicelevel. - #export SSD_NICELEVEL="-19" - --# Pass ulimit parameters -+# Pass ulimit parameters - #rc_ulimit="-u 30" - - # It's possible to define extra dependencies for services like so -diff --git a/etc/rc.in b/etc/rc.in -index edd7a5d..d267bec 100644 ---- a/etc/rc.in -+++ b/etc/rc.in -@@ -6,7 +6,7 @@ - # This gives us a nice colour boot :) - [ -z "$TERM" -o "$TERM" = "dumb" ] && export TERM="@TERM@" - --# Handle interrupts -+# Handle interrupts - trap : SIGINT - trap "echo 'Boot interrupted'; exit 1" SIGQUIT - -diff --git a/etc/rc.shutdown.in b/etc/rc.shutdown.in -index e0231c7..115f212 100644 ---- a/etc/rc.shutdown.in -+++ b/etc/rc.shutdown.in -@@ -2,7 +2,7 @@ - # Copyright (c) 2007-2008 Roy Marples - # All rights reserved. Released under the 2-clause BSD license. - --# Handle interrupts -+# Handle interrupts - trap : SIGINT SIGQUIT - - # Try and use stuff in /lib over anywhere else so we can shutdown -diff --git a/init.d.misc/dnsmasq.in b/init.d.misc/dnsmasq.in -index de4bade..958a87e 100644 ---- a/init.d.misc/dnsmasq.in -+++ b/init.d.misc/dnsmasq.in -@@ -10,7 +10,7 @@ required_files=/etc/dnsmasq.conf - extra_started_commands="reload" - - depend() --{ -+{ - provide dns - need localmount net - after bootmisc -diff --git a/init.d.misc/openvpn.in b/init.d.misc/openvpn.in -index eb1360b..a53a3ed 100644 ---- a/init.d.misc/openvpn.in -+++ b/init.d.misc/openvpn.in -@@ -24,7 +24,7 @@ if yesno $openvpn_client; then - command_args="$command_args --up $openvpn_up" - command_args="$command_args --down $openvpn_down" - required_files="$required_files $openvpn_up $openvpn_down" -- -+ - in_background_fake="start stop" - start_inactive=YES - fi -@@ -59,7 +59,7 @@ start_pre() - sysctl -a | grep -q '\.tap\.' || kldload if_tap - fi - fi -- -+ - # If the config file does not specify the cd option, we do - if ! grep -q "^[ \t]*cd[ \t].*" "$openvpn_config"; then - command_args="$command_args --cd $openvpn_dir" -diff --git a/init.d.misc/sshd.in b/init.d.misc/sshd.in -index 3d02cab..403f43b 100644 ---- a/init.d.misc/sshd.in -+++ b/init.d.misc/sshd.in -@@ -31,5 +31,5 @@ start_pre() - eend $? || return 1 - fi - -- $command -t -+ $command -t - } -diff --git a/init.d.misc/wpa_supplicant.in b/init.d.misc/wpa_supplicant.in -index f1d65c5..2426905 100644 ---- a/init.d.misc/wpa_supplicant.in -+++ b/init.d.misc/wpa_supplicant.in -@@ -43,7 +43,7 @@ find_wireless() - done - ;; - esac -- -+ - return 1 - } - -diff --git a/init.d/Makefile b/init.d/Makefile -index 6a0323c..b7490d3 100644 ---- a/init.d/Makefile -+++ b/init.d/Makefile -@@ -5,12 +5,10 @@ SRCS= bootmisc.in fsck.in hostname.in local.in localmount.in netmount.in \ - BIN= ${OBJS} - - # Build our old net foo or not --_OLDNET_SH= case "${MKOLDNET}" in \ -- [Yy][Ee][Ss]) echo "net.lo";; \ -- *) echo "";; \ -- esac --_OLDNET!= ${_OLDNET_SH} --_NET_LO= ${_OLDNET}$(shell ${_OLDNET_SH}) -+ifeq (${MKOLDNET},yes) -+_OLDNET= net.lo -+endif -+_NET_LO= ${_OLDNET} - - INSTALLAFTER= _installafter_${_NET_LO} - CLEANFILES+= ${_NET_LO} -diff --git a/init.d/adjkerntz.in b/init.d/adjkerntz.in -index ee09ac8..807d411 100644 ---- a/init.d/adjkerntz.in -+++ b/init.d/adjkerntz.in -@@ -4,7 +4,7 @@ - - extra_commands="save" - --description="Sets the local clock to UTC or Local Time." -+description="Sets the local clock to UTC or Local Time." - description_save="Saves the current time in the BIOS." - - : ${clock:=${CLOCK:-UTC}} -@@ -26,7 +26,7 @@ depend() - } - - start() --{ -+{ - ebegin "Starting the System Clock Adjuster [${utc}]" - if [ "$clock" != "UTC" ]; then - echo >/etc/wall_cmos_clock -diff --git a/init.d/bootmisc.in b/init.d/bootmisc.in -index 1298740..320e7e8 100644 ---- a/init.d/bootmisc.in -+++ b/init.d/bootmisc.in -@@ -88,7 +88,7 @@ start() - eend 1 "failed to create needed directory $x" - return 1 - fi -- fi -+ fi - done - - if dir_writeable /var/run; then -@@ -137,7 +137,7 @@ start() - # Make sure our X11 stuff have the correct permissions - # Omit the chown as bootmisc is run before network is up - # and users may be using lame LDAP auth #139411 -- rm -rf /tmp/.ICE-unix /tmp/.X11-unix -+ rm -rf /tmp/.ICE-unix /tmp/.X11-unix - mkdir -p /tmp/.ICE-unix /tmp/.X11-unix - chmod 1777 /tmp/.ICE-unix /tmp/.X11-unix - if [ -x /sbin/restorecon ]; then -diff --git a/init.d/consolefont.in b/init.d/consolefont.in -index d3acd75..75c2fd1 100644 ---- a/init.d/consolefont.in -+++ b/init.d/consolefont.in -@@ -61,12 +61,6 @@ start() - done - cp "$font" "$RC_LIBEXECDIR"/console - echo "${font##*/}" >"$RC_LIBEXECDIR"/console/font -- if yesno ${unicode:-${UNICODE}}; then -- echo "" > "$RC_LIBEXECDIR"/console/unicode -- else -- rm -f "$RC_LIBEXECDIR"/console/unicode -- fi -- - fi - - return $retval -diff --git a/init.d/hostid.in b/init.d/hostid.in -index 26ea9d6..a12e34a 100644 ---- a/init.d/hostid.in -+++ b/init.d/hostid.in -@@ -68,7 +68,7 @@ reset() - start() - { - if [ -r "$hostid_file" ]; then -- _set $(cat "$hostid_file") -+ _set $(cat "$hostid_file") - else - reset - fi -diff --git a/init.d/hwclock.in b/init.d/hwclock.in -index e99900f..640d997 100644 ---- a/init.d/hwclock.in -+++ b/init.d/hwclock.in -@@ -4,7 +4,7 @@ - - extra_commands="save show" - --description="Sets the local clock to UTC or Local Time." -+description="Sets the local clock to UTC or Local Time." - description_save="Saves the current time in the BIOS." - description_show="Displays the current time in the BIOS." - -@@ -87,17 +87,21 @@ start() - _hwclock --adjust $utc_cmd - retval=$(($retval + $?)) - fi -- -+ - # If setting UTC, don't bother to run hwclock when first booting - # as that's the default - if [ "$PREVLEVEL" != N -o \ -- "$utc_cmd}" != --utc -o \ -+ "$utc_cmd" != --utc -o \ - -n "$clock_args" ]; - then -- _hwclock --hctosys $utc_cmd $clock_args -+ if yesno $clock_hctosys; then -+ _hwclock --hctosys $utc_cmd $clock_args -+ else -+ _hwclock --systz $utc_cmd $clock_args -+ fi - retval=$(($retval + $?)) - fi -- -+ - eend $retval "Failed to set the system clock" - - return 0 -@@ -126,7 +130,7 @@ stop() - _hwclock --systohc $utc_cmd $clock_args - retval=$? - -- eend $retval "Failed to sync clocks" -+ eend $retval "Failed to sync clocks" - } - - save() -diff --git a/init.d/ipfw.in b/init.d/ipfw.in -index 9d6faa4..ea6e22a 100644 ---- a/init.d/ipfw.in -+++ b/init.d/ipfw.in -@@ -40,11 +40,11 @@ init() { - ipfw add deny all from any to 127.0.0.0/8 - ipfw add deny ip from 127.0.0.0/8 to any - -- if have_ip6; then -+ if have_ip6; then - ipfw add pass ip6 from any to any via lo0 - ipfw add deny ip6 from any to ::1 - ipfw add deny ip6 from ::1 to any -- -+ - ipfw add pass ip6 from :: to ff02::/16 proto ipv6-icmp - ipfw add pass ip6 from fe80::/10 to fe80::/10 proto ipv6-icmp - ipfw add pass ip6 from fe80::/10 to ff02::/16 proto ipv6-icmp -@@ -78,7 +78,7 @@ start() { - ipfw add pass udp from 0.0.0.0 68 to 255.255.255.255 67 out - ipfw add pass udp from any 67 to me 68 in - ipfw add pass udp from any 67 to 255.255.255.255 68 in -- # Some servers will ping the IP while trying to decide if it's -+ # Some servers will ping the IP while trying to decide if it's - # still in use. - ipfw add pass icmp from any to any icmptype 8 - -@@ -88,11 +88,11 @@ start() { - if have_ip6; then - # Allow ICMPv6 destination unreach - ipfw add pass ip6 from any to any icmp6types 1 proto ipv6-icmp -- -+ - # Allow NS/NA/toobig (don't filter it out) - ipfw add pass ip6 from any to any icmp6types 2,135,136 proto ipv6-icmp - fi -- -+ - # Add permits for this workstations published services below - # Only IPs and nets in firewall_allowservices is allowed in. - for i in $ipfw_ip_in; do -@@ -107,7 +107,7 @@ start() { - for i in $ipfw_ip_trust; do - ipfw add pass ip from $i to me - done -- -+ - ipfw add 65000 count ip from any to any - - # Drop packets to ports where we don't want logging -@@ -117,7 +117,7 @@ start() { - - # Broadcasts and muticasts - ipfw add deny ip from any to 255.255.255.255 -- ipfw add deny ip from any to 224.0.0.0/24 -+ ipfw add deny ip from any to 224.0.0.0/24 - - # Noise from routers - ipfw add deny udp from any to any 520 in -diff --git a/init.d/keymaps.in b/init.d/keymaps.in -index f37fbb5..776f3bb 100644 ---- a/init.d/keymaps.in -+++ b/init.d/keymaps.in -@@ -17,7 +17,7 @@ start() - : ${unicode:=$UNICODE} - : ${keymap:=$KEYMAP} - : ${extended_keymaps:=$EXTENDED_KEYMAPS} -- : ${windowkeys:=$SET_WINDOWSKEYS} -+ : ${windowkeys:=$SET_WINDOWSKEYS} - : ${fix_euro:=$FIX_EURO} - : ${dumpkeys_charset:=${DUMPKEYS_CHARSET}} - -diff --git a/init.d/killprocs.in b/init.d/killprocs.in -index d12f0f6..7132e9e 100644 ---- a/init.d/killprocs.in -+++ b/init.d/killprocs.in -@@ -15,7 +15,7 @@ start() - killall5 -15 - sleep 1 - eend 0 -- ebegin "Killing remaining processes" -+ ebegin "Killing remaining processes" - killall5 -9 - sleep 1 - eend 0 -diff --git a/init.d/local.in b/init.d/local.in -index 63d5e92..4db492e 100644 ---- a/init.d/local.in -+++ b/init.d/local.in -@@ -2,7 +2,7 @@ - # Copyright (c) 2007-2008 Roy Marples - # All rights reserved. Released under the 2-clause BSD license. - --description="Executes user commands in /etc/conf.d/local" -+description="Executes user programs in @SYSCONFDIR@/local.d" - - depend() - { -@@ -12,22 +12,40 @@ depend() - - start() - { -- ebegin "Starting local" -+ einfo "Starting local" -+ -+ local file -+ for file in @SYSCONFDIR@/local.d/*.start ; do -+ [ -x "$file" ] && "$file" -+ done - - if type local_start >/dev/null 2>&1; then -+ ewarn "@SYSCONFDIR@/conf.d/local should be removed." -+ ewarn "Please move the code from the local_start function" -+ ewarn "to scripts with an .start extension" -+ ewarn "in @SYSCONFDIR@/local.d" - local_start - fi - -- eend $? "Failed to start local" -+ return 0 - } - - stop() - { -- ebegin "Stopping local" -+ einfo "Stopping local" -+ -+ local file -+ for file in @SYSCONFDIR@/local.d/*.stop; do -+ [ -x "$file" ] && "$file" -+ done - - if type local_start >/dev/null 2>&1; then -+ ewarn "@SYSCONFDIR@/conf.d/local should be removed." -+ ewarn "Please move the code from the local_stop function" -+ ewarn "to scripts with an .stop extension" -+ ewarn "in @SYSCONFDIR@/local.d" - local_stop - fi - -- eend $? "Failed to stop local" -+ return 0 - } -diff --git a/init.d/localmount.in b/init.d/localmount.in -index 2a8e96f..e2ea801 100644 ---- a/init.d/localmount.in -+++ b/init.d/localmount.in -@@ -58,8 +58,8 @@ stop() - - . "$RC_LIBEXECDIR"/sh/rc-mount.sh - -- # Umount loopback devices -- einfo "Unmounting loopback devices" -+ # Umount loop devices -+ einfo "Unmounting loop devices" - eindent - do_unmount "umount -d" --skip-point-regex "$no_umounts_r" \ - --node-regex "^/dev/loop" -diff --git a/init.d/moused.in b/init.d/moused.in -index a362228..33b8d02 100644 ---- a/init.d/moused.in -+++ b/init.d/moused.in -@@ -21,13 +21,13 @@ depend() - - start() - { -- ebegin "Starting $name" -+ ebegin "Starting $name" - - if [ -z "$moused_device" ]; then - local dev= - for dev in /dev/psm[0-9]* /dev/ums[0-9]*; do - [ -c "$dev" ] || continue -- [ -e /var/run/moused-"${dev##*/}".pid ] && continue -+ [ -e /var/run/moused-"${dev##*/}".pid ] && continue - moused_device=$dev - eindent - einfo "Using mouse on $moused_device" -@@ -37,7 +37,7 @@ start() - fi - - if [ -z "$moused_device" ]; then -- eend 1 "No mouse device found" -+ eend 1 "No mouse device found" - return 1 - fi - -@@ -49,7 +49,7 @@ start() - --pidfile "$pidfile" \ - -- $args -p "$moused_device" -I "$pidfile" - local retval=$? -- -+ - if [ $retval = 0 ]; then - local ttyv= - for ttyv in /dev/ttyv*; do -@@ -57,6 +57,6 @@ start() - : $((retval+= $?)) - done - fi -- -+ - eend $retval "Failed to start moused" - } -diff --git a/init.d/net.lo.in b/init.d/net.lo.in -index 30d0186..b194a23 100644 ---- a/init.d/net.lo.in -+++ b/init.d/net.lo.in -@@ -180,7 +180,7 @@ _gen_module_list() - ${update} || return 0 - fi - -- einfo "Caching network module dependencies" -+ einfo "Caching network module dependencies" - # Run in a subshell to protect the main script - ( - after() { -@@ -215,7 +215,7 @@ _gen_module_list() - - for MODULE in "${MODULESDIR}"/*.sh; do - sh -n "${MODULE}" || continue -- . "${MODULE}" || continue -+ . "${MODULE}" || continue - MODULE=${MODULE#${MODULESDIR}/} - MODULE=${MODULE%.sh} - eval ${MODULE}_depend -@@ -343,7 +343,7 @@ _load_modules() - - # Wrap our provides - local f= -- for f in pre_start start post_start; do -+ for f in pre_start start post_start; do - eval "${provides}_${f}() { [ "$(command -v "${mod}_${f}")" = "${mod}_${f}" ] || return 0; ${mod}_${f} \"\$@\"; }" - done - -@@ -357,7 +357,7 @@ _load_modules() - *" ${mod} "*) - eval x=\$module_${mod}_provides - [ -z "${x}" ] && continue -- for f in pre_start start post_start; do -+ for f in pre_start start post_start; do - eval "${x}_${f}() { [ "$(command -v "${mod}_${f}")" = "${mod}_${f}" ] || return 0; ${mod}_${f} \"\$@\"; }" - done - eval module_${x}_providedby="${mod}" -@@ -379,7 +379,7 @@ _load_modules() - MODULES="${MODULES}${MODULES:+ }${mod}" - done - else -- for mod in ${LIST}; do -+ for mod in ${LIST}; do - MODULES="${mod}${MODULES:+ }${MODULES}" - done - fi -@@ -395,7 +395,7 @@ _load_config() - config_index=0 - local IFS="$__IFS" - set -- ${config} -- -+ - # We should support a space separated array for cidr configs - if [ $# = 1 ]; then - unset IFS -@@ -415,7 +415,7 @@ _load_config() - config_0="127.0.0.1/8" - config_index=1 - fi -- else -+ else - if [ -z "$1" ]; then - ewarn "No configuration specified; defaulting to DHCP" - config_0="dhcp" -@@ -500,7 +500,7 @@ start() - fi - - _up 2>/dev/null -- -+ - for module in ${MODULES}; do - if [ "$(command -v "${module}_pre_start")" = "${module}_pre_start" ]; then - ${module}_pre_start || exit $? -@@ -527,7 +527,7 @@ start() - _load_config - config_index=0 - -- eval our_metric=\$metric_${IFVAR} -+ eval our_metric=\$metric_${IFVAR} - if [ -n "${our_metric}" ]; then - metric=${our_metric} - elif [ "${IFACE}" != "lo" -a "${IFACE}" != "lo0" ]; then -@@ -536,7 +536,7 @@ start() - - while true; do - eval config=\$config_${config_index} -- [ -z "${config}" ] && break -+ [ -z "${config}" ] && break - - set -- ${config} - ebegin "$1" -@@ -638,7 +638,7 @@ ${routes}" - if [ "$(command -v postup)" = "postup" ]; then - ebegin "Running postup" - eindent -- postup -+ postup - eoutdent - fi - -diff --git a/init.d/netmount.in b/init.d/netmount.in -index 88ce16f..3bdc63b 100644 ---- a/init.d/netmount.in -+++ b/init.d/netmount.in -@@ -39,7 +39,7 @@ depend() - } - - start() --{ -+{ - local myneed= myuse= pmap="portmap" nfsmounts= - [ -x @SYSCONFDIR@/init.d/rpcbind ] && pmap="rpcbind" - -diff --git a/init.d/network.in b/init.d/network.in -index 01e88ce..a563332 100644 ---- a/init.d/network.in -+++ b/init.d/network.in -@@ -222,7 +222,7 @@ start() - einfo "Starting network" - routeflush - if [ "$RC_UNAME" = "Linux" ]; then -- ifconfig lo 127.0.0.1 netmask 255.0.0.0 || cr=1 -+ ifconfig lo 127.0.0.1 netmask 255.0.0.0 || cr=1 - route add -net 127.0.0.0 netmask 255.0.0.0 \ - gw 127.0.0.1 reject 2>/dev/null - else -@@ -287,7 +287,7 @@ start() - [ $r != 0 ] - veend $? - fi -- -+ - if [ -n "$defaultroute" ]; then - ebegin "Setting default route $defaultroute" - route add default $defaultroute -diff --git a/init.d/pf.in b/init.d/pf.in -index 15c9fc5..a36df26 100644 ---- a/init.d/pf.in -+++ b/init.d/pf.in -@@ -44,7 +44,7 @@ reload() - { - ebegin "Reloading $name rules." - pfctl -q -n -f "$pf_conf" && \ -- { -+ { - # Flush everything but existing state entries that way when - # rules are read in, it doesn't break established connections. - pfctl -q -Fnat -Fqueue -Frules -FSources -Finfo -FTables -Fosfp -diff --git a/init.d/swap-blk.in b/init.d/swap-blk.in -index 3c1c52c..f7d4367 100644 ---- a/init.d/swap-blk.in -+++ b/init.d/swap-blk.in -@@ -13,11 +13,11 @@ start() - ebegin "Activating block swap devices" - swapctl -A -t blk >/dev/null - eend 0 # If swapon has nothing todo it errors, so always return 0 --} -+} - - stop() - { - ebegin "Deactivating block swap devices" - swapctl -U -t blk >/dev/null -- eend 0 -+ eend 0 - } -diff --git a/init.d/swap.in b/init.d/swap.in -index d99b9b8..a1a931f 100644 ---- a/init.d/swap.in -+++ b/init.d/swap.in -@@ -16,7 +16,7 @@ start() - *) swapon -a >/dev/null;; - esac - eend 0 # If swapon has nothing todo it errors, so always return 0 --} -+} - - stop() - { -@@ -31,5 +31,5 @@ stop() - NetBSD|OpenBSD) swapctl -U -t noblk >/dev/null;; - *) swapoff -a >/dev/null;; - esac -- eend 0 -+ eend 0 - } -diff --git a/init.d/syscons.in b/init.d/syscons.in -index cb584b3..ba22bf5 100644 ---- a/init.d/syscons.in -+++ b/init.d/syscons.in -@@ -15,13 +15,13 @@ start() { - done - eend $? - fi -- -+ - if [ -n "$keymap" ]; then - ebegin "Setting keymap to $keymap" - kbdcontrol -l $keymap $ttydev$n - n=$(($n + 1)) - done -+ -+ # Save the encoding for use immediately at boot -+ if [ -w "$RC_LIBEXECDIR" ]; then -+ mkdir -p "$RC_LIBEXECDIR"/console -+ if yesno ${unicode:-${UNICODE}}; then -+ echo "" > "$RC_LIBEXECDIR"/console/unicode -+ else -+ rm -f "$RC_LIBEXECDIR"/console/unicode -+ fi -+ fi -+ - eend 0 - } -diff --git a/init.d/ttys.in b/init.d/ttys.in -index 178f182..b8a051d 100644 ---- a/init.d/ttys.in -+++ b/init.d/ttys.in -@@ -2,7 +2,7 @@ - # Copyright (c) 2008 Roy Marples - # All rights reserved. Released under the 2-clause BSD license. - --depend() -+depend() - { - after fsck - keyword -prefix -@@ -13,7 +13,7 @@ start() - ebegin "Setting tty flags" - ttyflags -a - eend $? || return $? -- -+ - if [ -c /dev/ttyp0 ]; then - chmod 666 /dev/tty[p-uw-zP-T][0-9a-zA-Z] - fi -diff --git a/init.d/wscons.in b/init.d/wscons.in -index 3b18a24..916e27b 100644 ---- a/init.d/wscons.in -+++ b/init.d/wscons.in -@@ -27,10 +27,10 @@ start() - font) - cmd=$wsfld - [ "$arg2" != "-" ] && cmd="$cmd -w $arg2" -- [ "$arg3" != "-" ] && cmd="$cmd -h $arg3" -+ [ "$arg3" != "-" ] && cmd="$cmd -h $arg3" - [ "$arg4" != "-" ] && cmd="$cmd -e $arg4" - cmd="$cmd -N $arg1 $arg5" -- eval "$cmd" -+ eval "$cmd" - ;; - - screen) -diff --git a/local.d/Makefile b/local.d/Makefile -new file mode 100644 -index 0000000..7a7d31d ---- /dev/null -+++ b/local.d/Makefile -@@ -0,0 +1,6 @@ -+DIR= ${LOCALDIR} -+CONF= README -+ -+MK= ../mk -+include ${MK}/os.mk -+include ${MK}/scripts.mk -diff --git a/local.d/README b/local.d/README -new file mode 100644 -index 0000000..d3c1156 ---- /dev/null -+++ b/local.d/README -@@ -0,0 +1,9 @@ -+This directory should contain programs or scripts which are to be run -+when the local service is started or stopped. -+ -+If a file in this directory is executable and it has a .start extension, -+it will be run when the local service is started. If a file is -+executable and it has a .stop extension, it will be run when the local -+service is stopped. -+ -+All files are processed in lexical order. -diff --git a/mk/.mk b/mk/.mk -deleted file mode 100644 -index e69de29..0000000 -diff --git a/mk/cc.mk b/mk/cc.mk -index 2c912d5..06556f0 100644 ---- a/mk/cc.mk -+++ b/mk/cc.mk -@@ -5,9 +5,9 @@ CFLAGS?= -O2 - - # Default to using the C99 standard - CSTD?= c99 --_CSTD_SH= if test -n "${CSTD}"; then echo "-std=${CSTD}"; else echo ""; fi --_CSTD!= ${_CSTD_SH} --CFLAGS+= ${_CSTD}$(shell ${_CSTD_SH}) -+ifneq (${CSTD},) -+CFLAGS+= -std=${CSTD} -+endif - - # Try and use some good cc flags if we're building from git - # We don't use -pedantic as it will warn about our perfectly valid -@@ -29,5 +29,5 @@ _CC_FLAGS_SH= for f in ${_CCFLAGS}; do \ - ${CC} $$f -S -xc -o /dev/null - ; \ - then printf "%s" "$$f "; fi \ - done; --_CC_FLAGS!= ${_CC_FLAGS_SH} --CFLAGS+= ${_CC_FLAGS}$(shell ${_CC_FLAGS_SH}) -+_CC_FLAGS:= $(shell ${_CC_FLAGS_SH}) -+CFLAGS+= ${_CC_FLAGS} -diff --git a/mk/debug.mk b/mk/debug.mk -index 67e9ad1..bc98b58 100644 ---- a/mk/debug.mk -+++ b/mk/debug.mk -@@ -3,14 +3,14 @@ - # All rights reserved. Released under the 2-clause BSD license. - - _RC_DEBUG_SH= case "${DEBUG}" in "") echo "";; *) echo "-DRC_DEBUG";; esac --_RC_DEBUG!= ${_RC_DEBUG_SH} --CPPFLAGS+= ${_RC_DEBUG}$(shell ${_RC_DEBUG_SH}) -+_RC_DEBUG:= $(shell ${_RC_DEBUG_SH}) -+CPPFLAGS+= ${_RC_DEBUG} - - # Should we enable this with a different flag? - _LD_DEBUG_SH= case "${DEBUG}" in "") echo "";; *) echo "-Wl,--rpath=../librc -Wl,--rpath=../libeinfo";; esac --_LD_DEBUG!= ${_LD_DEBUG_SH} --LDFLAGS+= ${_LD_DEBUG}$(shell ${_LD_DEBUG_SH}) -+_LD_DEBUG:= $(shell ${_LD_DEBUG_SH}) -+LDFLAGS+= ${_LD_DEBUG} - - _GGDB_SH= case "${DEBUG}" in "") echo "";; *) echo "-ggdb";; esac --_GGDB!= ${_GGDB_SH} --CFLAGS+= ${_GGDB}$(shell ${_GGDB_SH}) -+_GGDB:= $(shell ${_GGDB_SH}) -+CFLAGS+= ${_GGDB} -diff --git a/mk/depend-.mk b/mk/depend-.mk -deleted file mode 100644 -index 9d13b52..0000000 ---- a/mk/depend-.mk -+++ /dev/null -@@ -1,2 +0,0 @@ --# This space left intentionally blank because gmake does not load .depend --# by default -diff --git a/mk/depend-gmake.mk b/mk/depend-gmake.mk -deleted file mode 100644 -index 947843e..0000000 ---- a/mk/depend-gmake.mk -+++ /dev/null -@@ -1,3 +0,0 @@ --# Tell gmake to include the optional dependency file. --# This sucks, but I don't know any other way of portably making this work. ---include .depend -diff --git a/mk/depend.mk b/mk/depend.mk -index 067c1ef..44af378 100644 ---- a/mk/depend.mk -+++ b/mk/depend.mk -@@ -10,9 +10,4 @@ IGNOREFILES+= .depend - - depend: .depend extra_depend - --# Nasty hack. depend-.mk is a blank file, depend-gmake.mk has a gmake specific --# command to optionally include .depend. --# Someone should patch gmake to optionally include .depend if it exists. --_INC_DEP= $(shell if ${MAKE} --version | grep -q "^GNU "; then \ -- echo "gmake"; else echo ""; fi) --include ${MK}/depend-${_INC_DEP}.mk -+-include .depend -diff --git a/mk/dist.mk b/mk/dist.mk -index 24ce130..fb58edc 100644 ---- a/mk/dist.mk -+++ b/mk/dist.mk -@@ -9,14 +9,21 @@ DISTFILE?= ${DISTPREFIX}.tar.bz2 - CLEANFILES+= ${NAME}-*.tar.bz2 - - _SNAP_SH= date -u +%Y%m%d%H%M --_SNAP!= ${_SNAP_SH} --SNAP= ${_SNAP}$(shell ${_SNAP_SH}) -+_SNAP:= $(shell ${_SNAP_SH}) -+SNAP= ${_SNAP} - SNAPDIR= ${DISTPREFIX}-${SNAP} - SNAPFILE= ${SNAPDIR}.tar.bz2 - - dist: - git archive --prefix=${DISTPREFIX}/ ${GITREF} | bzip2 > ${DISTFILE} - -+distcheck: dist -+ rm -rf ${DISTPREFIX} -+ tar xf ${DISTFILE} -+ MAKEFLAGS= $(MAKE) -C ${DISTPREFIX} -+ MAKEFLAGS= $(MAKE) -C ${DISTPREFIX} check -+ rm -rf ${DISTPREFIX} -+ - snapshot: - rm -rf /tmp/${SNAPDIR} - mkdir /tmp/${SNAPDIR} -diff --git a/mk/git.mk b/mk/git.mk -index 54a98ef..62cae5a 100644 ---- a/mk/git.mk -+++ b/mk/git.mk -@@ -4,5 +4,5 @@ _GITVER_SH= if git rev-parse --short HEAD >/dev/null 2>&1; then \ - else \ - echo ""; \ - fi --_GITVER!= ${_GITVER_SH} --GITVER= ${_GITVER}$(shell ${_GITVER_SH}) -+_GITVER:= $(shell ${_GITVER_SH}) -+GITVER= ${_GITVER} -diff --git a/mk/lib.mk b/mk/lib.mk -index 16c16a5..a5682dd 100644 ---- a/mk/lib.mk -+++ b/mk/lib.mk -@@ -38,7 +38,7 @@ ${SHLIB_NAME}: ${SOBJS} - @${ECHO} building shared library $@ - @rm -f $@ ${SHLIB_LINK} - @ln -fs $@ ${SHLIB_LINK} -- ${CC} ${LDFLAGS} -shared -Wl,-x \ -+ ${CC} ${CFLAGS} ${LDFLAGS} -shared -Wl,-x \ - -o $@ -Wl,-soname,${SONAME} \ - ${SOBJS} ${LDADD} - -diff --git a/mk/ncurses.mk b/mk/ncurses.mk -deleted file mode 100644 -index d93e8fb..0000000 ---- a/mk/ncurses.mk -+++ /dev/null -@@ -1,3 +0,0 @@ --LIBTERMCAP?= -lncurses --CPPFLAGS+= -DHAVE_TERMCAP --LDADD+= ${LIBTERMCAP} -diff --git a/mk/os.mk b/mk/os.mk -index 09f2aef..0cde8ae 100644 ---- a/mk/os.mk -+++ b/mk/os.mk -@@ -4,8 +4,8 @@ - # Generic definitions - - _OS_SH= uname -s --_OS!= ${_OS_SH} --OS?= ${_OS}$(shell ${_OS_SH}) -+_OS:= $(shell ${_OS_SH}) -+OS?= ${_OS} - include ${MK}/os-${OS}.mk - - RC_LIB= /$(LIBNAME)/rc -diff --git a/mk/pam.mk b/mk/pam.mk -index 65115d5..15ffb54 100644 ---- a/mk/pam.mk -+++ b/mk/pam.mk -@@ -1,6 +1,10 @@ -+ifeq (${MKPAM},pam) - LIBPAM?= -lpam - CPPFLAGS+= -DHAVE_PAM - LDADD+= ${LIBPAM} - - PAMDIR?= /etc/pam.d - PAMMODE?= 0644 -+else ifneq (${MKPAM},) -+$(error if MKPAM is defined, it must be "pam") -+endif -diff --git a/mk/prog.mk b/mk/prog.mk -index 33929fb..5bddf18 100644 ---- a/mk/prog.mk -+++ b/mk/prog.mk -@@ -15,8 +15,8 @@ _DYNLINK_SH= if test "${PREFIX}" = "" && test -e /libexec/ld.elf_so; then \ - else \ - echo ""; \ - fi --_DYNLINK!= ${_DYNLINK_SH} --LDFLAGS+= ${_DYNLINK}$(shell ${_DYNLINK_SH}) -+_DYNLINK:= $(shell ${_DYNLINK_SH}) -+LDFLAGS+= ${_DYNLINK} - LDFLAGS+= -Wl,-rpath=${PREFIX}/${LIBNAME} - LDFLAGS+= ${PROGLDFLAGS} - -@@ -28,7 +28,7 @@ all: depend ${PROG} - ${CC} ${CFLAGS} ${CPPFLAGS} -c $< -o $@ - - ${PROG}: ${SCRIPTS} ${OBJS} -- ${CC} ${LDFLAGS} -o $@ ${OBJS} ${LDADD} -+ ${CC} ${CFLAGS} ${LDFLAGS} -o $@ ${OBJS} ${LDADD} - - clean: - rm -f ${CLEANFILES} -diff --git a/mk/scripts.mk b/mk/scripts.mk -index bd7ec6b..3517aab 100644 ---- a/mk/scripts.mk -+++ b/mk/scripts.mk -@@ -8,11 +8,11 @@ include ${MK}/os.mk - OBJS+= ${SRCS:.in=} - - _PKG_SED_SH= if test "${PREFIX}" = "${PKG_PREFIX}"; then echo "-e 's:@PKG_PREFIX@::g'"; else echo "-e 's:@PKG_PREFIX@:${PKG_PREFIX}:g'"; fi --_PKG_SED!= ${_PKG_SED_SH} -+_PKG_SED:= $(shell ${_PKG_SED_SH}) - _LCL_SED_SH= if test "${PREFIX}" = "${LOCAL_PREFIX}"; then echo "-e 's:@LOCAL_PREFIX@::g'"; else echo "-e 's:@LOCAL_PREFIX@:${LOCAL_PREFIX}:g'"; fi --_LCL_SED!= ${_LCL_SED_SH} -+_LCL_SED:= $(shell ${_LCL_SED_SH}) - --SED_REPLACE= -e 's:@SHELL@:${SH}:g' -e 's:@LIB@:${LIBNAME}:g' -e 's:@SYSCONFDIR@:${SYSCONFDIR}:g' -e 's:@LIBEXECDIR@:${LIBEXECDIR}:g' -e 's:@PREFIX@:${PREFIX}:g' ${_PKG_SED}$(shell ${_PKG_SED_SH}) ${_LCL_SED}$(shell ${_LCL_SED_SH}) -+SED_REPLACE= -e 's:@SHELL@:${SH}:g' -e 's:@LIB@:${LIBNAME}:g' -e 's:@SYSCONFDIR@:${SYSCONFDIR}:g' -e 's:@LIBEXECDIR@:${LIBEXECDIR}:g' -e 's:@PREFIX@:${PREFIX}:g' ${_PKG_SED} ${_LCL_SED} - - # Tweak our shell scripts - .SUFFIXES: .sh.in .in -diff --git a/mk/sys.mk b/mk/sys.mk -index e22731b..b68afdb 100644 ---- a/mk/sys.mk -+++ b/mk/sys.mk -@@ -12,8 +12,8 @@ SH= /bin/sh - - PREFIX?= - _UPREFIX_SH= case "${PREFIX}" in "") echo /usr;; *) echo "${PREFIX}";; esac --_UPREFIX!= ${_UPREFIX_SH} --UPREFIX= ${_UPREFIX}$(shell ${_UPREFIX_SH}) -+_UPREFIX:= $(shell ${_UPREFIX_SH}) -+UPREFIX= ${_UPREFIX} - LOCAL_PREFIX= /usr/local - - PICFLAG?= -fPIC -@@ -21,6 +21,7 @@ PICFLAG?= -fPIC - SYSCONFDIR?= ${PREFIX}/etc - INITDIR?= ${SYSCONFDIR}/init.d - CONFDIR?= ${SYSCONFDIR}/conf.d -+LOCALDIR?= ${SYSCONFDIR}/local.d - - BINDIR?= ${PREFIX}/sbin - BINMODE?= 0755 -@@ -29,8 +30,8 @@ INCDIR?= ${UPREFIX}/include - INCMODE?= 0444 - - _LIBNAME_SH= case `readlink /lib` in /lib64|lib64) echo "lib64";; *) echo "lib";; esac --_LIBNAME!= ${_LIBNAME_SH} --LIBNAME?= ${_LIBNAME}$(shell ${_LIBNAME_SH}) -+_LIBNAME:= $(shell ${_LIBNAME_SH}) -+LIBNAME?= ${_LIBNAME} - LIBDIR?= ${UPREFIX}/${LIBNAME} - LIBMODE?= 0444 - SHLIBDIR?= ${PREFIX}/${LIBNAME} -diff --git a/mk/termcap.mk b/mk/termcap.mk -index 7a603e3..b716276 100644 ---- a/mk/termcap.mk -+++ b/mk/termcap.mk -@@ -1,3 +1,11 @@ -+ifeq (${MKTERMCAP},ncurses) -+LIBTERMCAP?= -lncurses -+CPPFLAGS+= -DHAVE_TERMCAP -+LDADD+= ${LIBTERMCAP} -+else ifeq (${MKTERMCAP},termcap) - LIBTERMCAP?= -ltermcap - CPPFLAGS+= -DHAVE_TERMCAP - LDADD+= ${LIBTERMCAP} -+else ifneq (${MKTERMCAP},) -+$(error If MKTERMCAP is defined, it must be ncurses or termcap) -+endif -diff --git a/net/Makefile.Linux b/net/Makefile.Linux -index 7006d74..f7fb087 100644 ---- a/net/Makefile.Linux -+++ b/net/Makefile.Linux -@@ -1,7 +1,7 @@ - SRCS+= iwconfig.sh.in - INC+= adsl.sh apipa.sh arping.sh bonding.sh br2684ctl.sh bridge.sh \ -- ccwgroup.sh clip.sh iproute2.sh ifplugd.sh ip6to4.sh ipppd.sh \ -- iwconfig.sh netplugd.sh pppd.sh pump.sh tuntap.sh udhcpc.sh \ -+ ccwgroup.sh clip.sh ethtool.sh iproute2.sh ifplugd.sh ip6to4.sh \ -+ ipppd.sh iwconfig.sh netplugd.sh pppd.sh pump.sh tuntap.sh udhcpc.sh \ - vlan.sh - - .SUFFIXES: .sh.Linux.in -diff --git a/net/apipa.sh b/net/apipa.sh -index f4e5f73..0ca3bda 100644 ---- a/net/apipa.sh -+++ b/net/apipa.sh -@@ -21,7 +21,7 @@ apipa_start() - local iface="$1" i1= i2= addr= i=0 - - _exists true || return 1 -- -+ - einfo "Searching for free addresses in 169.254.0.0/16" - eindent - -diff --git a/net/arping.sh b/net/arping.sh -index 307e8ef..b04f05d 100644 ---- a/net/arping.sh -+++ b/net/arping.sh -@@ -19,7 +19,7 @@ arping_address() - esac - - # We need to bring the interface up to test -- _exists "${iface}" || return 1 -+ _exists "${iface}" || return 1 - _up "${iface}" - - eval w=\$arping_wait_${IFVAR} -@@ -43,7 +43,7 @@ arping_address() - sed -n -e 'y/abcdef/ABCDEF/' -e 's/.*\[\([^]]*\)\].*/\1/p')" - fi - [ -z "${foundmac}" ] && return 1 -- -+ - if [ -n "${mac}" ]; then - if [ "${mac}" != "${foundmac}" ]; then - vewarn "Found ${ip} but MAC ${foundmac} does not match" -@@ -74,7 +74,7 @@ arping_start() - fi - - eindent -- -+ - for x in ${gateways}; do - local IFS=, - set -- ${x} -@@ -119,7 +119,7 @@ arping_start() - fi - done - unset IFS -- -+ - _load_config - return 0 - fi -diff --git a/net/bonding.sh b/net/bonding.sh -index 415306c..209d4f0 100644 ---- a/net/bonding.sh -+++ b/net/bonding.sh -@@ -115,7 +115,7 @@ bonding_pre_start() - - bonding_stop() - { -- _is_bond || return 0 -+ _is_bond || return 0 - - local slaves= s= - slaves=$( \ -diff --git a/net/br2684ctl.sh b/net/br2684ctl.sh -index 3eea0d9..77dafc9 100644 ---- a/net/br2684ctl.sh -+++ b/net/br2684ctl.sh -@@ -17,7 +17,7 @@ br2684ctl_depend() - } - - _config_vars="$_config_vars bridge bridge_add brctl" -- -+ - br2684ctl_pre_start() - { - local opts= -@@ -40,7 +40,7 @@ br2684ctl_pre_start() - return 1 - ;; - esac -- -+ - einfo "Starting RFC 2684 Bridge control on ${IFACE}" - start-stop-daemon --start --exec $(_br2684ctl) --background \ - --make-pidfile --pidfile "/var/run/br2684ctl-${IFACE}.pid" \ -@@ -52,7 +52,7 @@ br2684ctl_post_stop() - { - local pidfile="/var/run/br2684ctl-${IFACE}.pid" - [ -e "${pidfile}" ] || return 0 -- -+ - einfo "Stopping RFC 2684 Bridge control on ${IFACE}" - start-stop-daemon --stop --quiet --pidfile "${pidfile}" - eend $? -diff --git a/net/bridge.sh b/net/bridge.sh -index c0172ed..91e68d6 100644 ---- a/net/bridge.sh -+++ b/net/bridge.sh -@@ -38,15 +38,15 @@ bridge_pre_start() - local opts="$(_get_array "brctl_${IFVAR}")" - # brif is used for dynamic add - eval brif=\$bridge_add_${IFVAR} -- -+ - # we need a way to if the bridge exists in a variable name, not just the - # contents of a variable. Eg if somebody has only bridge_add_eth0='br0', - # with no other lines mentioning br0. - eval bridge_unset=\${bridge_${IFVAR}-y\} - eval brctl_unset=\${brctl_${IFVAR}-y\} -- -- if [ -z "${brif}" -a "${brctl_unset}" == 'y' ]; then -- if [ -z "${ports}" -a "${bridge_unset}" == "y" ]; then -+ -+ if [ -z "${brif}" -a "${brctl_unset}" = 'y' ]; then -+ if [ -z "${ports}" -a "${bridge_unset}" = "y" ]; then - #eerror "Misconfigured static bridge detected (see net.example)" - return 0 - fi -@@ -186,6 +186,6 @@ bridge_post_stop() - brctl delbr "${iface}" - eend $? - fi -- -+ - return 0 - } -diff --git a/net/ccwgroup.sh b/net/ccwgroup.sh -index cf08943..6fcba1d 100644 ---- a/net/ccwgroup.sh -+++ b/net/ccwgroup.sh -@@ -5,7 +5,7 @@ _config_vars="$_config_vars ccwgroup" - - ccwgroup_depend() - { -- before interface -+ before interface - } - - ccwgroup_pre_start() -@@ -42,7 +42,7 @@ ccwgroup_pre_stop() - { - # Erase any existing ccwgroup to be safe - service_set_value ccwgroup_device "" -- -+ - [ ! -L /sys/class/net/"${FACE}"/driver ] && return 0 - local driver="$(readlink /sys/class/net/"${IFACE}"/driver)" - case "${diver}" in -@@ -59,7 +59,7 @@ ccwgroup_post_stop() - { - local device="$(service_get_value ccwgroup_device)" - [ -z "${device}" ] && return 0 -- -+ - einfo "Disabling ccwgroup on ${iface}" - echo "0" >/sys/devices/qeth/"${device}"/online - echo "1" >/sys/devices/qeth/"${device}"/ungroup -diff --git a/net/clip.sh b/net/clip.sh -index 3cb84e7..35efa3f 100644 ---- a/net/clip.sh -+++ b/net/clip.sh -@@ -97,7 +97,7 @@ clip_pre_start() - return 1 - fi - fi -- -+ - local started_here= - if ! are_atmclip_svcs_running; then - atmclip_svcs_start || return 1 -diff --git a/net/ethtool.sh b/net/ethtool.sh -new file mode 100644 -index 0000000..64b44a6 ---- /dev/null -+++ b/net/ethtool.sh -@@ -0,0 +1,54 @@ -+# Copyright (c) 2011 by Gentoo Foundation -+# All rights reserved. Released under the 2-clause BSD license. -+ -+_ethtool() { -+ echo /usr/sbin/ethtool -+} -+ -+ethtool_depend() -+{ -+ program $(_ethtool) -+ before interface -+} -+ -+# This is just to trim whitespace, do not add any quoting! -+_trim() { -+ echo $* -+} -+ -+ethtool_pre_start() { -+ local order opt OFS="${OIFS}" -+ eval order=\$ethtool_order_${IFVAR} -+ [ -z "${order}" ] && eval order=\$ethtool_order -+ [ -z "${order}" ] && order="flash change-eeprom change pause coalesce ring offload identify nfc rxfh-indir ntuple" -+ # ethtool options not used: --driver, --register-dump, --eeprom-dump, --negotiate, --test, --statistics -+ eindent -+ for opt in ${order} ; do -+ local args -+ eval args=\$ethtool_${opt//-/_}_${IFVAR} -+ -+ # Skip everything if no arguments -+ [ -z "${args}" ] && continue -+ -+ # Split on \n -+ local IFS="$__IFS" -+ -+ for p in ${args} ; do -+ IFS="${OIFS}" -+ local args_pretty="$(_trim "${p}")" -+ # Do nothing if empty -+ [ -z "${args_prety}" ] && continue -+ args_pretty="--${opt} $IFACE ${args_pretty}" -+ args="--${opt} $IFACE ${args}" -+ ebegin "ethtool ${args_pretty}" -+ $(_ethtool) ${args} -+ rc=$? -+ eend $rc "ethtool exit code $rc" -+ # TODO: ethtool has MANY different exit codes, with no -+ # documentation as to which ones are fatal or not. For now we -+ # simply print the exit code and don't stop the start sequence. -+ done -+ IFS="${OIFS}" -+ done -+ eoutdent -+} -diff --git a/net/ifconfig.sh.Linux.in b/net/ifconfig.sh.Linux.in -index 74fcc9f..f5c2064 100644 ---- a/net/ifconfig.sh.Linux.in -+++ b/net/ifconfig.sh.Linux.in -@@ -139,7 +139,7 @@ _add_address() - return 0 - fi - -- case "$1" in -+ case "$1" in - *:*) ifconfig "${IFACE}" inet6 add "$@"; return $?;; - esac - -@@ -225,7 +225,7 @@ _delete_addresses() - while true; do - local addr=$(_get_inet_address) - [ -z "${addr}" ] && break -- -+ - if [ "${addr}" = "127.0.0.1/8" ]; then - # Don't delete the loopback address - [ "${IFACE}" = "lo" -o "${IFACE}" = "lo0" ] && break -@@ -246,7 +246,7 @@ _delete_addresses() - einfo "${addr}" - ifconfig "${IFACE}" inet6 del "${addr}" - done -- -+ - return 0 - } - -diff --git a/net/ifplugd.sh b/net/ifplugd.sh -index 5831720..9f6c884 100644 ---- a/net/ifplugd.sh -+++ b/net/ifplugd.sh -@@ -57,7 +57,7 @@ ifplugd_pre_start() - ewarn "WARNING: infinite timeout set for ${IFACE} to come up" - elif [ ${timeout} -lt 0 ]; then - einfo "Backgrounding ..." -- exit 1 -+ exit 1 - fi - - veinfo "Waiting for ${IFACE} to be marked as started" -@@ -84,7 +84,7 @@ ifplugd_stop() - - local pidfile="/var/run/ifplugd.${IFACE}.pid" - [ ! -e "${pidfile}" ] && return 0 -- -+ - ebegin "Stopping ifplugd on ${IFACE}" - start-stop-daemon --stop --quiet --exec /usr/sbin/ifplugd \ - --pidfile "${pidfile}" --signal QUIT -diff --git a/net/ifwatchd.sh b/net/ifwatchd.sh -index d9da15e..4e6b1c6 100644 ---- a/net/ifwatchd.sh -+++ b/net/ifwatchd.sh -@@ -50,7 +50,7 @@ ifwatchd_stop() - -- -c "${RC_LIBEXECDIR}/sh/ifwatchd-carrier.sh" \ - -n "${RC_LIBEXECDIR}/sh/ifwatchd-nocarrier.sh" "${IFACE}" \ - || return 0 -- -+ - ebegin "Stopping ifwatchd on" "${IFACE}" - start-stop-daemon --stop --exec /usr/sbin/ifwatchd \ - -- -c "${RC_LIBEXECDIR}/sh/ifwatchd-carrier.sh" \ -diff --git a/net/ip6to4.sh b/net/ip6to4.sh -index 6bddb7e..2349429 100644 ---- a/net/ip6to4.sh -+++ b/net/ip6to4.sh -@@ -56,7 +56,7 @@ ip6to4_start() - [ ${i} -lt 32 ] && continue - ;; - esac -- -+ - veinfo "IPv4 address on ${host}: ${ip}/${subnet}" - local ipa= ip6= IFS="${IFS}." - for i in ${ip}; do -@@ -87,7 +87,7 @@ ip6to4_start() - eend $? || return 1 - _up - fi -- -+ - # Now apply our config - eval config_${config_index}=\'"${new}"\' - config_index=$((${config_index} - 1)) -diff --git a/net/iproute2.sh b/net/iproute2.sh -index 1cd4f42..a2e9db7 100644 ---- a/net/iproute2.sh -+++ b/net/iproute2.sh -@@ -117,14 +117,14 @@ _add_address() - shift; shift; shift - set -- "${one}/$(_netmask2cidr "${three}")" "$@" - fi -- -+ - # tunnel keyword is 'peer' in iproute2, but 'pointopoint' in ifconfig. - if [ "$2" = "pointopoint" ]; then - local one="$1" - shift; shift - set -- "${one}" "peer" "$@" - fi -- -+ - # Always scope lo addresses as host unless specified otherwise - if [ "${IFACE}" = "lo" ]; then - set -- "$@" "scope" "host" -@@ -162,7 +162,7 @@ _add_route() - set -- "${one}" "${two}" via "$@" - fi - -- local cmd= have_metric=false -+ local cmd= have_metric=false - while [ -n "$1" ]; do - case "$1" in - metric) cmd="${cmd} $1"; have_metric=true;; -@@ -221,7 +221,7 @@ _ip_rule_runner() { - local IFS="$__IFS" - for ru in $rules ; do - unset IFS -- ruN="$(trim "${ru}")" -+ ruN="$(_trim "${ru}")" - [ -z "${ruN}" ] && continue - vebegin "${cmd} ${ruN}" - ip rule ${cmd} ${ru} -@@ -239,9 +239,14 @@ iproute2_pre_start() - if [ -n "${tunnel}" ]; then - # Set our base metric to 1000 - metric=1000 -+ # Bug#347657: If the mode is 'ipip6' or 'ip6ip6', the -6 must be passed -+ # to iproute2 during tunnel creation. -+ local ipproto='' -+ [ "${tunnel##mode ipip6}" != "${tunnel}" ] && ipproto='-6' -+ [ "${tunnel##mode ip6ip6}" != "${tunnel}" ] && ipproto='-6' - - ebegin "Creating tunnel ${IFVAR}" -- ip tunnel add ${tunnel} name "${IFACE}" -+ ip ${ipproto} tunnel add ${tunnel} name "${IFACE}" - eend $? || return 1 - _up - fi -diff --git a/net/iwconfig.sh.BSD.in b/net/iwconfig.sh.BSD.in -index ec88e66..f94246b 100644 ---- a/net/iwconfig.sh.BSD.in -+++ b/net/iwconfig.sh.BSD.in -@@ -477,7 +477,7 @@ iwconfig_defaults() - #ifconfig "${iface}" txpower 100 2>/dev/null - ifconfig "${IFACE}" bssid - - ifconfig "${IFACE}" ssid - -- ifconfig "${IFACE}" wepkey 1:- wepkey 2:- wepkey 3:- wepkey 4:- -+ ifconfig "${IFACE}" wepkey 1:- wepkey 2:- wepkey 3:- wepkey 4:- - ifconfig "${IFACE}" authmode open - ifconfig "${IFACE}" -mediaopt adhoc - ifconfig "${IFACE}" -mediaopt hostap -@@ -563,8 +563,8 @@ iwconfig_pre_start() - return 0 - fi - -- iwconfig_defaults -- iwconfig_user_config -+ iwconfig_defaults -+ iwconfig_user_config - - # Set the base metric to be 2000 - metric=2000 -diff --git a/net/iwconfig.sh.Linux.in b/net/iwconfig.sh.Linux.in -index 28cdd23..600ffe7 100644 ---- a/net/iwconfig.sh.Linux.in -+++ b/net/iwconfig.sh.Linux.in -@@ -47,7 +47,7 @@ _get_ssid() - - _get_ap_mac_address() - { -- local mac="$(iwgetid --raw --ap "${IFACE}")" -+ local mac="$(iwgetid --raw --ap "${IFACE}")" - case "${mac}" in - "00:00:00:00:00:00") return 1;; - "44:44:44:44:44:44") return 1;; -@@ -163,7 +163,7 @@ iwconfig_setup_specific() - local key=$(iwconfig_get_wep_key) - - iwconfig_set_mode "${mode}" -- -+ - # Now set the key - if ! eval iwconfig "${IFACE}" key "${key}"; then - if [ "${key}" != "off" ]; then -@@ -185,10 +185,10 @@ iwconfig_setup_specific() - ewarn "${IFACE} does not support setting the channel to \"${channel:-3}\"" - return 1 - fi -- -+ - # Finally apply the user Config - iwconfig_user_config -- -+ - iwconfig_report - return 0 - } -@@ -226,7 +226,7 @@ iwconfig_wait_for_association() - /proc/net/wireless)" != "0" ] && return 0 - fi - fi -- -+ - sleep 1 - [ ${timeout} -eq 0 ] && continue - i=$((${i} + 1)) -@@ -281,7 +281,7 @@ iwconfig_associate() - iwconfig "${IFACE}" freq "${freq}" - fi - [ -n "${mac}" ] && iwconfig "${IFACE}" ap "${mac}" -- -+ - # Finally apply the user Config - iwconfig_user_config - -@@ -377,10 +377,10 @@ iwconfig_scan() - for line; do - case "${line}" in - *Address:*) -- APS=$((${APS} + 1)) -+ APS=$((${APS} + 1)) - eval MAC_${APS}="\""$(echo "${line#*: }" | tr '[:lower:]' '[:upper:]')"\"" - eval QUALITY_${APS}=0 -- ;; -+ ;; - *ESSID:*) - x=${line#*\"} - x=${x%*\"} -@@ -455,7 +455,7 @@ iwconfig_scan() - eval a=\$QUALITY_${i} - eval b=\$QUALITY_${k} - local u=${k} -- # We need to split this into two tests, otherwise bash errors -+ # We need to split this into two tests, otherwise bash errors - [ -n "${a}" -a -n "${b}" ] && [ "${a}" -lt "${b}" ] && u=${i} - unset MAC_${u} SSID_${u} MODE_${u} CHAN_${u} QUALITY_${u} ENC_${u} - fi -@@ -581,7 +581,7 @@ iwconfig_connect_not_preferred() - break - fi - done -- -+ - if ! ${pref}; then - SSID=${e} - eval mode=\$MODE_${i} -@@ -711,10 +711,10 @@ iwconfig_pre_start() - # wait if our scan returns nothing - LC_ALL=C iwconfig "${IFACE}" | sed -e '1d' | grep -q "Tx-Power=off" - local txpowerwasoff=$? -- -+ - iwconfig_defaults - iwconfig_user_config -- -+ - # Set the base metric to be 2000 - metric=2000 - -diff --git a/net/macchanger.sh b/net/macchanger.sh -index 32bbdc9..9126d30 100644 ---- a/net/macchanger.sh -+++ b/net/macchanger.sh -@@ -24,7 +24,7 @@ macchanger_pre_start() - - # The interface needs to be up for macchanger to work most of the time - _down -- -+ - mac=$(echo "${mac}" | tr '[:upper:]' '[:lower:]') - local hex="[0-9a-f][0-9a-f]" - case "${mac}" in -diff --git a/net/netplugd.sh b/net/netplugd.sh -index 0f46643..8f36ef2 100644 ---- a/net/netplugd.sh -+++ b/net/netplugd.sh -@@ -59,7 +59,7 @@ netplugd_pre_start() - ewarn "WARNING: infinite timeout set for ${IFACE} to come up" - elif [ ${timeout} -lt 0 ]; then - einfo "Backgrounding ..." -- exit 1 -+ exit 1 - fi - - veinfo "Waiting for ${IFACE} to be marked as started" -@@ -86,7 +86,7 @@ netplugd_stop() - - local pidfile="/var/run/netplugd-${IFACE}.pid" - [ ! -e "${pidfile}" ] && return 0 -- -+ - ebegin "Stopping netplug on" "${IFACE}" - start-stop-daemon --stop --quiet --exec /sbin/netplugd \ - --pidfile "${pidfile}" -diff --git a/net/pppd.sh b/net/pppd.sh -index a8c8882..c7cfa44 100644 ---- a/net/pppd.sh -+++ b/net/pppd.sh -@@ -31,7 +31,7 @@ pppd_pre_start() - if yesno ${IN_BACKGROUND}; then - local config= - eval config=\$config_${IFVAR} -- # If no config for ppp then don't default to DHCP -+ # If no config for ppp then don't default to DHCP - if [ -z "${config}" ]; then - eval config_${IFVAR}=null - fi -@@ -39,7 +39,7 @@ pppd_pre_start() - fi - - local link= i= unit="${IFACE#ppp}" opts= -- -+ - # PPP requires a link to communicate over - normally a serial port - # PPPoE communicates over Ethernet - # PPPoA communicates over ATM -@@ -92,7 +92,7 @@ pppd_pre_start() - && [ -n "${password}" -o -z "${passwordset}" ]; then - opts="plugin passwordfd.so ${opts} passwordfd 0" - fi -- -+ - if ! ${hasdefaultmetric}; then - local m= - eval m=\$metric_${IFVAR} -@@ -122,7 +122,7 @@ pppd_pre_start() - - # Set unit - opts="unit ${unit} ${opts}" -- -+ - # Setup connect script - local chatprog="/usr/sbin/chat -e -E -v" phone= - eval phone=\$phone_number_${IFVAR} -diff --git a/net/pump.sh b/net/pump.sh -index d03e2c8..ecceff0 100644 ---- a/net/pump.sh -+++ b/net/pump.sh -@@ -35,7 +35,7 @@ pump_start() - - ebegin "Running pump" - eval pump "${args}" -- eend $? || return 1 -+ eend $? || return 1 - - _show_address - return 0 -@@ -48,7 +48,7 @@ pump_stop() - start-stop-daemon --quiet --test --stop --exec /sbin/pump || return 0 - - # Check that pump is running on the interface -- if ! pump --status --interface "${IFACE}" >/dev/null 2>&1; then -+ if ! pump --status --interface "${IFACE}" >/dev/null 2>&1; then - return 0 - fi - -diff --git a/net/system.sh b/net/system.sh -index b22eee6..6680a7d 100644 ---- a/net/system.sh -+++ b/net/system.sh -@@ -80,10 +80,10 @@ _system_nis() - - eval servers=\$nis_servers_${IFVAR} - [ -z "${servers}" ] && servers=${nis_servers} -- -+ - eval domain=\$nis_domain_${IFVAR} - [ -z "${domain}" ] && domain=${nis_domain} -- -+ - [ -z "${servers}" -a -z "${domain}" ] && return 0 - - buffer="# Generated by net-scripts for interface ${iface}\n" -@@ -110,8 +110,8 @@ _system_nis() - system_pre_start() - { - _system_dns -- _system_ntp -- _system_nis -+ _system_ntp -+ _system_nis - - return 0 - } -diff --git a/net/vlan.sh b/net/vlan.sh -index c245051..1d50d4f 100644 ---- a/net/vlan.sh -+++ b/net/vlan.sh -@@ -1,9 +1,18 @@ - # Copyright (c) 2007-2008 Roy Marples - # All rights reserved. Released under the 2-clause BSD license. - -+_ip() -+{ -+ if [ -x /bin/ip ]; then -+ echo /bin/ip -+ else -+ echo /sbin/ip -+ fi -+} -+ - vlan_depend() - { -- program /sbin/vconfig -+ program $(_ip) - after interface - before dhcp - } -@@ -36,31 +45,12 @@ _check_vlan() - - vlan_pre_start() - { -- local vc="$(_get_array "vconfig_${IFVAR}")" -- [ -z "${vc}" ] && return 0 -- -- _check_vlan || return 1 -- _exists || return 1 -- -- local v= x= e= -- local IFS="$__IFS" -- for v in ${vc}; do -- unset IFS -- case "${v}" in -- set_name_type" "*) x=${v};; -- *) -- set -- ${v} -- x="$1 ${IFACE}" -- shift -- x="${x} $@" -- ;; -- esac -- -- e="$(vconfig ${x} 2>&1 1>/dev/null)" -- [ -z "${e}" ] && continue -- eerror "${e}" -+ local vconfig -+ eval vconfig=\$vconfig_${IFVAR} -+ if [ -n "${vconfig}" ]; then -+ eerror "You must convert your vconfig_ VLAN entries to vlan${N} entries." - return 1 -- done -+ fi - } - - vlan_post_start() -@@ -68,14 +58,26 @@ vlan_post_start() - local vlans= - eval vlans=\$vlans_${IFVAR} - [ -z "${vlans}" ] && return 0 -- -+ - _check_vlan || return 1 - _exists || return 1 - -- local vlan= e= s= -+ local vlan= e= s= vname= vflags= vingress= vegress= - for vlan in ${vlans}; do - einfo "Adding VLAN ${vlan} to ${IFACE}" -- e="$(vconfig add "${IFACE}" "${vlan}" 2>&1 1>/dev/null)" -+ # We need to gather all interface configuration options -+ # 1) naming. Default to the standard "${IFACE}.${vlan}" but it can be anything -+ eval vname=\$vlan${vlan}_name -+ [ -z "${vname}" ] && vname="${IFACE}.${vlan}" -+ # 2) flags -+ eval vflags=\$vlan${vlan}_flags -+ # 3) ingress/egress map -+ eval vingress=\$vlan${vlan}_ingress -+ [ -z "${vingress}" ] || vingress="ingress-qos-map ${vingress}" -+ eval vegress=\$vlan${vlan}_egress -+ [ -z "${vegress}" ] || vegress="egress-qos-map ${vegress}" -+ -+ e="$(ip link add link "${IFACE}" name "${vname}" type vlan id "${vlan}" ${vflags} ${vingress} ${vegress} 2>&1 1>/dev/null)" - if [ -n "${e}" ]; then - eend 1 "${e}" - continue -@@ -95,7 +97,7 @@ vlan_post_start() - start - ) || mark_service_stopped "net.${ifname}" - done -- -+ - return 0 - } - -@@ -110,7 +112,7 @@ vlan_post_stop() - stop - ) && { - mark_service_stopped "net.${vlan}" -- vconfig rem "${vlan}" >/dev/null -+ ip link delete "${vlan}" type vlan >/dev/null - } - done - -diff --git a/net/wpa_supplicant.sh b/net/wpa_supplicant.sh -index 379e615..c619f99 100644 ---- a/net/wpa_supplicant.sh -+++ b/net/wpa_supplicant.sh -@@ -149,7 +149,7 @@ wpa_supplicant_pre_start() - if [ -z "${wpac}" ]; then - if service_started devd; then - ebegin "Backgrounding ..." -- exit 1 -+ exit 1 - fi - return 0 - fi -@@ -167,7 +167,7 @@ wpa_supplicant_pre_start() - -P "/var/run/wpa_cli-${IFACE}.pid" -B - if eend $?; then - ebegin "Backgrounding ..." -- exit 1 -+ exit 1 - fi - - # wpa_cli failed to start? OK, error here -diff --git a/sh/init.sh.Linux.in b/sh/init.sh.Linux.in -index 0e581c1..9b04557 100644 ---- a/sh/init.sh.Linux.in -+++ b/sh/init.sh.Linux.in -@@ -34,7 +34,7 @@ mount_svcdir() - [ $? -eq 0 ] && return 0 - fi - fi -- -+ - if grep -Eq "[[:space:]]+ramfs$" /proc/filesystems; then - fs="ramfs" - # ramfs has no special options -@@ -65,19 +65,27 @@ mount_svcdir() - # By default VServer already has /proc mounted, but OpenVZ does not! - # However, some of our users have an old proc image in /proc - # NFC how they managed that, but the end result means we have to test if --# /proc actually works or not. We to this by comparing uptime to one a second --# ago -+# /proc actually works or not. We to this by comparing two reads of -+# /proc/self/stat. They will not match, because at least the minor fault count -+# field (field 10) should have changed. -+# -+# We can use any file here that fills the following requirements: -+# - changes between sequential reads -+# - is world-readable (not blocked in hardened kernel) -+# - Is only a single line (ergo entire check is doable with no forks) - mountproc=true --if [ -e /proc/uptime ]; then -- up="$(cat /proc/uptime)" -- sleep 1 -- if [ "$up" = "$(cat /proc/uptime)" ]; then -+f=/proc/self/stat -+if [ -e $f ]; then -+ exec 9<$f ; read a <&9 ; exec 9<&- -+ exec 9<$f ; read b <&9 ; exec 9<&- -+ if [ "$a" = "$b" ]; then - eerror "You have cruft in /proc that should be deleted" - else - einfo "/proc is already mounted, skipping" - mountproc=false - fi - fi -+unset a b f - - if $mountproc; then - procfs="proc" -diff --git a/sh/runscript.sh.in b/sh/runscript.sh.in -index 947c2f7..229d1ee 100644 ---- a/sh/runscript.sh.in -+++ b/sh/runscript.sh.in -@@ -111,7 +111,7 @@ start() - [ -n "$command" ] || return 0 - local _background= - ebegin "Starting ${name:-$RC_SVCNAME}" -- if yesno "${command_background}"; then -+ if yesno "${command_background}"; then - _background="--background --pidfile" - fi - if yesno "$start_inactive"; then -@@ -252,7 +252,7 @@ while [ -n "$1" ]; do - eerror "$RC_SVCNAME: function \`$1' defined but does not exist" - exit 1 - fi -- fi -+ fi - fi - done - eerror "$RC_SVCNAME: unknown function \`$1'" -diff --git a/src/libeinfo/Makefile b/src/libeinfo/Makefile -index 1569f8f..b93b5e5 100644 ---- a/src/libeinfo/Makefile -+++ b/src/libeinfo/Makefile -@@ -10,4 +10,4 @@ MK= ../../mk - include ${MK}/lib.mk - include ${MK}/cc.mk - include ${MK}/debug.mk --include ${MK}/${MKTERMCAP}.mk -+include ${MK}/termcap.mk -diff --git a/src/librc/Makefile b/src/librc/Makefile -index d3f9cc4..574aa2a 100644 ---- a/src/librc/Makefile -+++ b/src/librc/Makefile -@@ -19,21 +19,26 @@ SED_CMD= -e 's:@PREFIX@:${PREFIX}:g' - SED_CMD+= -e 's:@LIB@:${LIBNAME}:g' - SED_CMD+= -e 's:@SYSCONFDIR@:${SYSCONFDIR}:g' - SED_CMD+= -e 's:@LIBEXECDIR@:${LIBEXECDIR}:g' --_PKG_PREFIX_SH= if test -n "${PKG_PREFIX}" && test "${PKG_PREFIX}" != "/" && test "${PKG_PREFIX}" != "${PREFIX}"; then \ -- echo "-e 's:@PKG_PREFIX@:${PKG_PREFIX}:g'"; \ -- else \ -- echo "-e 's:.*@PKG_PREFIX@.*:\#undef RC_PKG_PREFIX:g'"; \ -- fi --_PKG_PREFIX!= ${_PKG_PREFIX_SH} --SED_CMD+= ${_PKG_PREFIX}$(shell ${_PKG_PREFIX_SH}) -- --_LCL_PREFIX_SH= if test -n "${LOCAL_PREFIX}" && test "${LOCAL_PREFIX}" != "/" && test "${LOCAL_PREFIX}" != "${PREFIX}"; then \ -- echo "-e 's:@LOCAL_PREFIX@:${LOCAL_PREFIX}:g'"; \ -- else \ -- echo "-e 's:@LOCAL_PREFIX@::g'"; \ -- fi --_LCL_PREFIX!= ${_LCL_PREFIX_SH} --SED_CMD+= ${_LCL_PREFIX}$(shell ${_LCL_PREFIX_SH}) -+ -+_PKG_PREFIX= -e 's:.*@PKG_PREFIX@.*:\#undef RC_PKG_PREFIX:g' -+ifneq (${PKG_PREFIX},) -+ifneq (${PKG_PREFIX},/) -+ifneq (${PKG_PREFIX},${PREFIX}) -+_PKG_PREFIX= -e 's:@PKG_PREFIX@:${PKG_PREFIX}:g' -+endif -+endif -+endif -+SED_CMD+= ${_PKG_PREFIX} -+ -+_LCL_PREFIX= -e 's:@LOCAL_PREFIX@::g' -+ifneq (${LOCAL_PREFIX},) -+ifneq (${LOCAL_PREFIX},/) -+ifneq (${LOCAL_PREFIX},${PREFIX}) -+_LCL_PREFIX= -e 's:@LOCAL_PREFIX@:${LOCAL_PREFIX}:g' -+endif -+endif -+endif -+SED_CMD+= ${_LCL_PREFIX} - - .SUFFIXES: .h.in .h - .h.in.h: -diff --git a/src/librc/librc-daemon.c b/src/librc/librc-daemon.c -index 1bedf29..dde62f9 100644 ---- a/src/librc/librc-daemon.c -+++ b/src/librc/librc-daemon.c -@@ -40,7 +40,7 @@ pid_is_exec(pid_t pid, const char *exec) - int c; - bool retval = false; - -- exec = basename_c(exec); -+ exec = basename_c(exec); - snprintf(buffer, sizeof(buffer), "/proc/%d/stat", pid); - if ((fp = fopen(buffer, "r"))) { - while ((c = getc(fp)) != EOF && c != '(') -@@ -283,7 +283,7 @@ _match_daemon(const char *path, const char *file, RC_STRINGLIST *match) - } - - static RC_STRINGLIST * --_match_list(const char *exec, const char* const* argv, const char *pidfile) -+_match_list(const char *exec, const char *const *argv, const char *pidfile) - { - RC_STRINGLIST *match = rc_stringlist_new(); - int i = 0; -@@ -297,7 +297,7 @@ _match_list(const char *exec, const char* const* argv, const char *pidfile) - rc_stringlist_add(match, m); - free(m); - } -- -+ - while (argv && argv[i]) { - l = strlen(*argv) + strlen("argv_=") + 16; - m = xmalloc(sizeof(char) * l); -@@ -323,7 +323,7 @@ rc_service_daemon_set(const char *service, const char *exec, - const char *pidfile, bool started) - { - char dirpath[PATH_MAX]; -- char file[PATH_MAX]; -+ char file[PATH_MAX]; - int nfiles = 0; - char oldfile[PATH_MAX] = { '\0' }; - bool retval = false; -diff --git a/src/librc/librc-depend.c b/src/librc/librc-depend.c -index 765f595..54cd72a 100644 ---- a/src/librc/librc-depend.c -+++ b/src/librc/librc-depend.c -@@ -114,7 +114,13 @@ get_deptype(const RC_DEPINFO *depinfo, const char *type) - } - - RC_DEPTREE * --rc_deptree_load(void) -+rc_deptree_load(void) { -+ return rc_deptree_load_file(RC_DEPTREE_CACHE); -+} -+librc_hidden_def(rc_deptree_load) -+ -+RC_DEPTREE * -+rc_deptree_load_file(const char *deptree_file) - { - FILE *fp; - RC_DEPTREE *deptree; -@@ -127,7 +133,7 @@ rc_deptree_load(void) - char *e; - int i; - -- if (!(fp = fopen(RC_DEPTREE_CACHE, "r"))) -+ if (!(fp = fopen(deptree_file, "r"))) - return NULL; - - deptree = xmalloc(sizeof(*deptree)); -@@ -172,16 +178,16 @@ rc_deptree_load(void) - } - fclose(fp); - free(line); -- -+ - return deptree; - } --librc_hidden_def(rc_deptree_load) -+librc_hidden_def(rc_deptree_load_file) - - static bool - valid_service(const char *runlevel, const char *service, const char *type) - { - RC_SERVICE state; -- -+ - if (!runlevel || - strcmp(type, "ineed") == 0 || - strcmp(type, "needsme") == 0) -@@ -393,7 +399,7 @@ visit_service(const RC_DEPTREE *deptree, - if (!(di = get_depinfo(deptree, service->value))) - continue; - provided = get_provided(di, runlevel, options); -- -+ - if (TAILQ_FIRST(provided)) { - TAILQ_FOREACH(p, provided, entries) { - di = get_depinfo(deptree, p->value); -@@ -767,14 +773,14 @@ rc_deptree_update(void) - if (!depinfo || strcmp(depinfo->service, service) != 0) { - deptype = NULL; - depinfo = get_depinfo(deptree, service); -- if (!depinfo) { -+ if (!depinfo) { - depinfo = xmalloc(sizeof(*depinfo)); - TAILQ_INIT(&depinfo->depends); - depinfo->service = xstrdup(service); - TAILQ_INSERT_TAIL(deptree, depinfo, entries); - } - } -- -+ - /* We may not have any depends */ - if (!type || !depends) - continue; -@@ -815,7 +821,7 @@ rc_deptree_update(void) - depend[l - 2] == 's' && - depend[l - 1] == 'h') - continue; -- -+ - /* Remove our dependency if instructed */ - if (depend[0] == '!') { - rc_stringlist_delete(deptype->services, depend + 1); -diff --git a/src/librc/librc-misc.c b/src/librc/librc-misc.c -index 97cec38..aa038a3 100644 ---- a/src/librc/librc-misc.c -+++ b/src/librc/librc-misc.c -@@ -61,7 +61,7 @@ rc_getline(char **line, size_t *len, FILE *fp) - char *p; - size_t last = 0; - -- while(!feof(fp)) { -+ while (!feof(fp)) { - if (*line == NULL || last != 0) { - *len += BUFSIZ; - *line = xrealloc(*line, *len); -@@ -218,3 +218,52 @@ rc_config_value(RC_STRINGLIST *list, const char *entry) - return NULL; - } - librc_hidden_def(rc_config_value) -+ -+/* Global for caching the strings loaded from rc.conf to avoid reparsing for -+ * each rc_conf_value call */ -+static RC_STRINGLIST *rc_conf = NULL; -+ -+char * -+rc_conf_value(const char *setting) -+{ -+ RC_STRINGLIST *old; -+ RC_STRING *s; -+ char *p; -+ -+ if (! rc_conf) { -+ rc_conf = rc_config_load(RC_CONF); -+#ifdef DEBUG_MEMORY -+ atexit(_free_rc_conf); -+#endif -+ -+ /* Support old configs */ -+ if (exists(RC_CONF_OLD)) { -+ old = rc_config_load(RC_CONF_OLD); -+ TAILQ_CONCAT(rc_conf, old, entries); -+#ifdef DEBUG_MEMORY -+ free(old); -+#endif -+ } -+ -+ /* Convert old uppercase to lowercase */ -+ TAILQ_FOREACH(s, rc_conf, entries) { -+ p = s->value; -+ while (p && *p && *p != '=') { -+ if (isupper((unsigned char)*p)) -+ *p = tolower((unsigned char)*p); -+ p++; -+ } -+ } -+ } -+ -+ return rc_config_value(rc_conf, setting); -+} -+librc_hidden_def(rc_conf_value) -+ -+#ifdef DEBUG_MEMORY -+static void -+_free_rc_conf(void) -+{ -+ rc_stringlist_free(rc_conf); -+} -+#endif -diff --git a/src/librc/librc-stringlist.c b/src/librc/librc-stringlist.c -index c3825cb..818a31c 100644 ---- a/src/librc/librc-stringlist.c -+++ b/src/librc/librc-stringlist.c -@@ -146,7 +146,7 @@ librc_hidden_def(rc_stringlist_sort) - void - rc_stringlist_free(RC_STRINGLIST *list) - { -- RC_STRING *s1; -+ RC_STRING *s1; - RC_STRING *s2; - - if (!list) -diff --git a/src/librc/librc.c b/src/librc/librc.c -index 8a9fd79..e134547 100644 ---- a/src/librc/librc.c -+++ b/src/librc/librc.c -@@ -72,7 +72,7 @@ ls_dir(const char *dir, int options) - { - DIR *dp; - struct dirent *d; -- RC_STRINGLIST *list = NULL; -+ RC_STRINGLIST *list = NULL; - struct stat buf; - size_t l; - char file[PATH_MAX]; -@@ -198,23 +198,24 @@ file_regex(const char *file, const char *regex) - } - #endif - -+/* New sys identification code -+ * Not to be used for any binaries outside of openrc. */ - const char * - rc_sys_v2(void) - { --#define __STRING_SWITCH(x) { char* __string_switch = x; if(false) {} --#define __STRING_CASE(y) else if(strcmp(__string_switch,y) == 0) -+#define __STRING_SWITCH(x) { char *__string_switch = x; if (false) {} -+#define __STRING_CASE(y) else if (strcmp(__string_switch,y) == 0) - #define __STRING_SWITCH_END() } -- char* systype = rc_conf_value("rc_sys"); -- /* New sys identification code */ -- if(systype) { -- char* s = systype; -- // Convert to uppercase -- while(s && *s) { -- if(islower((unsigned char)*s)) -- *s = toupper((unsigned char)*s); -+ char *systype = rc_conf_value("rc_sys"); -+ if (systype) { -+ char *s = systype; -+ /* Convert to uppercase */ -+ while (s && *s) { -+ if (islower((unsigned char) *s)) -+ *s = toupper((unsigned char) *s); - s++; - } -- // Now do detection -+ /* Now do detection */ - __STRING_SWITCH(systype) - __STRING_CASE(RC_SYS_PREFIX) { return RC_SYS_PREFIX; } - #ifdef __FreeBSD__ -@@ -241,13 +242,14 @@ rc_sys_v2(void) - } - librc_hidden_def(rc_sys_v2) - --/* Old sys identification code */ -+/* Old sys identification code. -+ * Not to be used for any binaries outside of openrc. */ - const char * - rc_sys_v1(void) - { - #ifdef PREFIX - return RC_SYS_PREFIX; --#else -+#else - - #ifdef __FreeBSD__ - int jailed = 0; -@@ -290,7 +292,7 @@ librc_hidden_def(rc_sys_v1) - const char * - rc_sys(void) - { -- if(rc_conf_value("rc_sys")) { -+ if (rc_conf_value("rc_sys")) { - return rc_sys_v2(); - } else { - return rc_sys_v1(); -@@ -389,7 +391,7 @@ bool - rc_runlevel_stack(const char *dst, const char *src) - { - char d[PATH_MAX], s[PATH_MAX]; -- -+ - if (!rc_runlevel_exists(dst) || !rc_runlevel_exists(src)) - return false; - snprintf(s, sizeof(s), "../%s", src); -@@ -402,7 +404,7 @@ bool - rc_runlevel_unstack(const char *dst, const char *src) - { - char path[PATH_MAX]; -- -+ - snprintf(path, sizeof(path), "%s/%s/%s", RC_RUNLEVELDIR, dst, src); - return (unlink(path) == 0 ? true : false); - } -@@ -638,7 +640,7 @@ rc_service_mark(const char *service, const RC_SERVICE state) - } - skip_state = state; - } -- -+ - if (state == RC_SERVICE_HOTPLUGGED || state == RC_SERVICE_FAILED) { - free(init); - return true; -@@ -786,7 +788,7 @@ rc_service_value_set(const char *service, const char *option, - { - FILE *fp; - char file[PATH_MAX]; -- char *p = file; -+ char *p = file; - - p += snprintf(file, sizeof(file), RC_SVCDIR "/options/%s", service); - if (mkdir(file, 0755) != 0 && errno != EEXIST) -diff --git a/src/librc/librc.h b/src/librc/librc.h -index dc97f1d..f04750d 100644 ---- a/src/librc/librc.h -+++ b/src/librc/librc.h -@@ -72,6 +72,7 @@ - #define librc_hidden_proto(x) hidden_proto(x) - #define librc_hidden_def(x) hidden_def(x) - -+librc_hidden_proto(rc_conf_value) - librc_hidden_proto(rc_config_list) - librc_hidden_proto(rc_config_load) - librc_hidden_proto(rc_config_value) -@@ -79,6 +80,7 @@ librc_hidden_proto(rc_deptree_depend) - librc_hidden_proto(rc_deptree_depends) - librc_hidden_proto(rc_deptree_free) - librc_hidden_proto(rc_deptree_load) -+librc_hidden_proto(rc_deptree_load_file) - librc_hidden_proto(rc_deptree_order) - librc_hidden_proto(rc_deptree_update) - librc_hidden_proto(rc_deptree_update_needed) -diff --git a/src/librc/rc.h.in b/src/librc/rc.h.in -index 3d0ffb4..5b06de2 100644 ---- a/src/librc/rc.h.in -+++ b/src/librc/rc.h.in -@@ -43,6 +43,14 @@ __BEGIN_DECLS - #define RC_CONFDIR RC_SYSCONFDIR "/conf.d" - #define RC_PLUGINDIR RC_LIBDIR "/plugins" - -+#define RC_PROFILE_ENV RC_SYSCONFDIR "/profile.env" -+#define RC_SYS_WHITELIST RC_LIBEXECDIR "/conf.d/env_whitelist" -+#define RC_USR_WHITELIST RC_SYSCONFDIR "/conf.d/env_whitelist" -+#define RC_CONF RC_SYSCONFDIR "/rc.conf" -+#define RC_CONF_OLD RC_SYSCONFDIR "/conf.d/rc" -+ -+#define RC_PATH_PREFIX RC_LIBEXECDIR "/bin:/bin:/sbin:/usr/bin:/usr/sbin" -+ - /* PKG_PREFIX is where packages are installed if different from the base OS - * On Gentoo this is normally unset, on FreeBSD /usr/local and on NetBSD - * /usr/pkg. */ -@@ -342,7 +350,7 @@ typedef void *RC_DEPTREE; - * @param target - * @param mtime of newest target - * @param filename of the newest target (needs mtime param) -- * @return true if source is newer than target, otherwise false */ -+ * @return true if source is newer than target, otherwise false */ - bool rc_newer_than(const char *, const char *, time_t *, char *); - - /*! Check to see if source is older than target. -@@ -351,7 +359,7 @@ bool rc_newer_than(const char *, const char *, time_t *, char *); - * @param target - * @param mtime of oldest target - * @param filename of the oldest target (needs mtime param) -- * @return true if source is older than target, otherwise false */ -+ * @return true if source is older than target, otherwise false */ - bool rc_older_than(const char *, const char *, time_t *, char *); - - /*! Update the cached dependency tree if it's older than any init script, -@@ -375,6 +383,11 @@ bool rc_deptree_update_needed(time_t *, char *); - * @return pointer to the dependency tree */ - RC_DEPTREE *rc_deptree_load(void); - -+/*! Load a cached dependency tree from the specified file and return a pointer -+ * to it. This pointer should be freed with rc_deptree_free when done. -+ * @return pointer to the dependency tree */ -+RC_DEPTREE *rc_deptree_load_file(const char *); -+ - /*! List the depend for the type of service - * @param deptree to search - * @param type to use (keywords, etc) -@@ -457,6 +470,9 @@ RC_STRINGLIST *rc_config_load(const char *); - /*! Return the value of the entry from a key=value list. */ - char *rc_config_value(RC_STRINGLIST *, const char *); - -+/*! Return the value of the entry from rc.conf. */ -+char *rc_conf_value(const char *); -+ - /*! Check if a variable is a boolean and return its value. - * If variable is not a boolean then we set errno to be ENOENT when it does - * not exist or EINVAL if it's not a boolean. -@@ -503,7 +519,7 @@ RC_STRING *rc_stringlist_find(RC_STRINGLIST *, const char *); - RC_STRINGLIST *rc_stringlist_split(const char *, const char *); - - --/*! Sort the list according to C locale -+/*! Sort the list according to C locale - * @param list to sort */ - void rc_stringlist_sort(RC_STRINGLIST **); - -diff --git a/src/librc/rc.map b/src/librc/rc.map -index 113f2d7..c5f10ad 100644 ---- a/src/librc/rc.map -+++ b/src/librc/rc.map -@@ -1,5 +1,6 @@ - RC_1.0 { - global: -+ rc_conf_value; - rc_config_list; - rc_config_load; - rc_config_value; -@@ -7,6 +8,7 @@ global: - rc_deptree_depends; - rc_deptree_free; - rc_deptree_load; -+ rc_deptree_load_file; - rc_deptree_order; - rc_deptree_update; - rc_deptree_update_needed; -diff --git a/src/rc/Makefile b/src/rc/Makefile -index 9d33192..5397415 100644 ---- a/src/rc/Makefile -+++ b/src/rc/Makefile -@@ -41,9 +41,25 @@ include ${MK}/prog.mk - include ${MK}/git.mk - include ${MK}/cc.mk - --include ${MK}/${MKTERMCAP}.mk -+include ${MK}/termcap.mk - LDADD+= ${LIBDL} ${LIBKVM} --include ${MK}/${MKPAM}.mk -+include ${MK}/pam.mk -+ -+# create symlinks to rc if not an SELINUX system, otherwise create a wrapper -+# script to call rc with the proper name of the applet to execute. -+# $1 is a list of the links -+# $2 is the path+name of the target to link to (usually 'rc' or '/sbin/rc') -+# $3 is the path where the links are created -+define make-links -+ for x in $(1); do \ -+ if test -n "${MKSELINUX}"; then \ -+ printf '#!/bin/sh\nexec ${2} --applet %s "$$@"\n' $$x >${3}/$$x; \ -+ chmod ${BINMODE} ${3}/$$x; \ -+ else \ -+ ln -sf ${2} ${3}/$$x; \ -+ fi; \ -+ done; -+endef - - ${SRCS}: version.h - -@@ -61,13 +77,13 @@ install: all - ${INSTALL} -d ${DESTDIR}${SBINDIR} - ${INSTALL} -m ${BINMODE} ${PROG} ${DESTDIR}${SBINDIR} - ${INSTALL} -d ${DESTDIR}${BINDIR} -- for x in ${BINLINKS}; do ln -fs ${SBINDIR}/${PROG} ${DESTDIR}${BINDIR}/$$x; done -+ $(call make-links,${BINLINKS},${SBINDIR}/${PROG},${DESTDIR}${BINDIR}) - ${INSTALL} -d ${DESTDIR}${SBINDIR} -- for x in ${SBINLINKS}; do ln -fs ${PROG} ${DESTDIR}${SBINDIR}/$$x; done -+ $(call make-links,${SBINLINKS},${SBINDIR}/${PROG},${DESTDIR}${SBINDIR}) - ${INSTALL} -d ${DESTDIR}${LINKDIR}/bin -- for x in $(RC_BINLINKS); do ln -fs ${SBINDIR}/${PROG} ${DESTDIR}${LINKDIR}/bin/$$x; done -+ $(call make-links,${RC_BINLINKS},${SBINDIR}/${PROG},${DESTDIR}${LINKDIR}/bin) - ${INSTALL} -d ${DESTDIR}${LINKDIR}/sbin -- for x in ${RC_SBINLINKS}; do ln -fs ${SBINDIR}/${PROG} ${DESTDIR}${LINKDIR}/sbin/$$x; done -+ $(call make-links, ${RC_SBINLINKS},${SBINDIR}/${PROG},${DESTDIR}${LINKDIR}/sbin) - if test "${MKPAM}" = pam; then \ - ${INSTALL} -d ${DESTDIR}${PAMDIR}; \ - ${INSTALL} -m ${PAMMODE} start-stop-daemon.pam ${DESTDIR}${PAMDIR}/start-stop-daemon; \ -@@ -76,4 +92,4 @@ install: all - check test:: - - links: rc -- for l in ${ALL_LINKS}; do ln -sf rc $$l || exit $$? ; done -+ $(call make-links,${ALL_LINKS},rc,.) -diff --git a/src/rc/_usage.c b/src/rc/_usage.c -index ec1ce1d..175634a 100644 ---- a/src/rc/_usage.c -+++ b/src/rc/_usage.c -@@ -1,7 +1,7 @@ - /* - * Copyright (c) 2007-2008 Roy Marples - * All rights reserved -- -+ * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: -@@ -24,6 +24,8 @@ - * SUCH DAMAGE. - */ - -+#include "version.h" -+ - #if lint - # define _noreturn - #endif -@@ -34,6 +36,22 @@ - #endif - - _noreturn static void -+show_version(void) -+{ -+ const char *bootlevel = NULL; -+ -+ printf("%s (OpenRC", applet); -+ if ((bootlevel = rc_sys())) -+ printf(" [%s]", bootlevel); -+ printf(") %s", VERSION); -+#ifdef BRANDING -+ printf(" (%s)", BRANDING); -+#endif -+ printf("\n"); -+ exit(EXIT_SUCCESS); -+} -+ -+_noreturn static void - usage(int exit_status) - { - const char * const has_arg[] = { "", "", "[arg]" }; -diff --git a/src/rc/_usage.h b/src/rc/_usage.h -index d65e05e..5e116c9 100644 ---- a/src/rc/_usage.h -+++ b/src/rc/_usage.h -@@ -1,7 +1,7 @@ - /* - * Copyright (c) 2007-2008 Roy Marples - * All rights reserved -- -+ * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: -@@ -24,11 +24,12 @@ - * SUCH DAMAGE. - */ - --#define getoptstring_COMMON "Chqv" -+#define getoptstring_COMMON "ChqVv" - - #define longopts_COMMON \ - { "help", 0, NULL, 'h'}, \ - { "nocolor", 0, NULL, 'C'}, \ -+ { "version", 0, NULL, 'V'}, \ - { "verbose", 0, NULL, 'v'}, \ - { "quiet", 0, NULL, 'q'}, \ - { NULL, 0, NULL, 0 } -@@ -36,11 +37,13 @@ - #define longopts_help_COMMON \ - "Display this help output", \ - "Disable color output", \ -+ "Display software version", \ - "Run verbosely", \ - "Run quietly" - - #define case_RC_COMMON_getopt_case_C setenv ("EINFO_COLOR", "NO", 1); - #define case_RC_COMMON_getopt_case_h usage (EXIT_SUCCESS); -+#define case_RC_COMMON_getopt_case_V if (argc == 2) show_version(); - #define case_RC_COMMON_getopt_case_v setenv ("EINFO_VERBOSE", "YES", 1); - #define case_RC_COMMON_getopt_case_q setenv ("EINFO_QUIET", "YES", 1); - #define case_RC_COMMON_getopt_default usage (EXIT_FAILURE); -@@ -48,6 +51,7 @@ - #define case_RC_COMMON_GETOPT \ - case 'C': case_RC_COMMON_getopt_case_C; break; \ - case 'h': case_RC_COMMON_getopt_case_h; break; \ -+ case 'V': case_RC_COMMON_getopt_case_V; break; \ - case 'v': case_RC_COMMON_getopt_case_v; break; \ - case 'q': case_RC_COMMON_getopt_case_q; break; \ - default: case_RC_COMMON_getopt_default; break; -diff --git a/src/rc/fstabinfo.c b/src/rc/fstabinfo.c -index a05bfae..69b5bbd 100644 ---- a/src/rc/fstabinfo.c -+++ b/src/rc/fstabinfo.c -@@ -109,7 +109,7 @@ do_mount(struct ENT *ent) - argv[6] = ENT_FILE(*ent); - argv[7] = NULL; - switch (pid = vfork()) { -- case -1: -+ case -1: - eerrorx("%s: vfork: %s", applet, strerror(errno)); - /* NOTREACHED */ - case 0: -diff --git a/src/rc/rc-applets.c b/src/rc/rc-applets.c -index 11bc2d5..6068cb6 100644 ---- a/src/rc/rc-applets.c -+++ b/src/rc/rc-applets.c -@@ -152,7 +152,7 @@ do_e(int argc, char **argv) - ts.tv_nsec = WAIT_INTERVAL; - for (i = 0; i < argc; i++) { - ebeginv("Waiting for %s", argv[i]); -- for (;;){ -+ for (;;) { - if (exists(argv[i])) - break; - if (nanosleep(&ts, NULL) == -1) -@@ -298,7 +298,7 @@ do_service(int argc, char **argv) - } - } - ok = rc_service_started_daemon(service, exec, NULL, idx); -- -+ - } else if (strcmp(applet, "service_crashed") == 0) { - ok = (_rc_can_find_pids() && - rc_service_daemons_crashed(service) && -@@ -429,6 +429,17 @@ run_applets(int argc, char **argv) - char *p; - pid_t pid = 0; - -+ /* Bug 351712: We need an extra way to explicitly select an applet OTHER -+ * than trusting argv[0], as argv[0] is not going to be the applet value if -+ * we are doing SELinux context switching. For this, we allow calls such as -+ * 'rc --applet APPLET', and shift ALL of argv down by two array items. */ -+ if (strcmp(applet, "rc") == 0 && argc >= 3 && -+ (strcmp(argv[1],"--applet") == 0 || strcmp(argv[1], "-a") == 0)) { -+ applet = argv[2]; -+ argv += 2; -+ argc -= 2; -+ } -+ - /* These are designed to be applications in their own right */ - if (strcmp(applet, "fstabinfo") == 0) - exit(fstabinfo(argc, argv)); -@@ -476,7 +487,7 @@ run_applets(int argc, char **argv) - exit(EXIT_FAILURE); - } - exit(EXIT_SUCCESS); -- }; -+ }; - - if (applet[0] == 'e' || (applet[0] == 'v' && applet[1] == 'e')) - exit(do_e(argc, argv)); -diff --git a/src/rc/rc-depend.c b/src/rc/rc-depend.c -index 29f23d2..3d00d1a 100644 ---- a/src/rc/rc-depend.c -+++ b/src/rc/rc-depend.c -@@ -106,7 +106,7 @@ _rc_deptree_load(int force, int *regen) { - } - - #include "_usage.h" --#define getoptstring "aot:suT" getoptstring_COMMON -+#define getoptstring "aot:suTF:" getoptstring_COMMON - static const struct option longopts[] = { - { "starting", 0, NULL, 'a'}, - { "stopping", 0, NULL, 'o'}, -@@ -114,6 +114,7 @@ static const struct option longopts[] = { - { "notrace", 0, NULL, 'T'}, - { "strict", 0, NULL, 's'}, - { "update", 0, NULL, 'u'}, -+ { "deptree-file", 1, NULL, 'F'}, - longopts_COMMON - }; - static const char * const longopts_help[] = { -@@ -123,6 +124,7 @@ static const char * const longopts_help[] = { - "Don't trace service dependencies", - "Only use what is in the runlevels", - "Force an update of the dependency tree", -+ "File to load cached deptree from", - longopts_help_COMMON - }; - #include "_usage.c" -@@ -141,6 +143,7 @@ rc_depend(int argc, char **argv) - char *runlevel = xstrdup(getenv("RC_RUNLEVEL")); - int opt; - char *token; -+ char *deptree_file = NULL; - - types = rc_stringlist_new(); - while ((opt = getopt_long(argc, argv, getoptstring, -@@ -166,13 +169,21 @@ rc_depend(int argc, char **argv) - case 'T': - options &= RC_DEP_TRACE; - break; -+ case 'F': -+ deptree_file = xstrdup(optarg); -+ break; - -- case_RC_COMMON_GETOPT -+ case_RC_COMMON_GETOPT - } - } - -- if (!(deptree = _rc_deptree_load(update, NULL))) -- eerrorx("failed to load deptree"); -+ if (deptree_file) { -+ if (!(deptree = rc_deptree_load_file(deptree_file))) -+ eerrorx("failed to load deptree"); -+ } else { -+ if (!(deptree = _rc_deptree_load(update, NULL))) -+ eerrorx("failed to load deptree"); -+ } - - if (!runlevel) - runlevel = rc_runlevel_get(); -diff --git a/src/rc/rc-logger.c b/src/rc/rc-logger.c -index 4734989..e45c327 100644 ---- a/src/rc/rc-logger.c -+++ b/src/rc/rc-logger.c -@@ -172,7 +172,7 @@ rc_logger_open(const char *level) - ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws); - if (openpty(&rc_logger_tty, &slave_tty, NULL, &tt, &ws)) - return; -- } else -+ } else - if (openpty(&rc_logger_tty, &slave_tty, NULL, NULL, NULL)) - return; - -diff --git a/src/rc/rc-misc.c b/src/rc/rc-misc.c -index 0239f9d..64edf68 100644 ---- a/src/rc/rc-misc.c -+++ b/src/rc/rc-misc.c -@@ -52,61 +52,7 @@ - #include "rc-misc.h" - #include "version.h" - --#define PROFILE_ENV RC_SYSCONFDIR "/profile.env" --#define SYS_WHITELIST RC_LIBEXECDIR "/conf.d/env_whitelist" --#define USR_WHITELIST RC_SYSCONFDIR "/conf.d/env_whitelist" --#define RC_CONF RC_SYSCONFDIR "/rc.conf" --#define RC_CONF_OLD RC_SYSCONFDIR "/conf.d/rc" -- --#define PATH_PREFIX RC_LIBEXECDIR "/bin:/bin:/sbin:/usr/bin:/usr/sbin" -- --static RC_STRINGLIST *rc_conf = NULL; -- --extern char** environ; -- --#ifdef DEBUG_MEMORY --static void --_free_rc_conf(void) --{ -- rc_stringlist_free(rc_conf); --} --#endif -- --char * --rc_conf_value(const char *setting) --{ -- RC_STRINGLIST *old; -- RC_STRING *s; -- char *p; -- -- if (! rc_conf) { -- rc_conf = rc_config_load(RC_CONF); --#ifdef DEBUG_MEMORY -- atexit(_free_rc_conf); --#endif -- -- /* Support old configs */ -- if (exists(RC_CONF_OLD)) { -- old = rc_config_load(RC_CONF_OLD); -- TAILQ_CONCAT(rc_conf, old, entries); --#ifdef DEBUG_MEMORY -- free(old); --#endif -- } -- -- /* Convert old uppercase to lowercase */ -- TAILQ_FOREACH(s, rc_conf, entries) { -- p = s->value; -- while (p && *p && *p != '=') { -- if (isupper((unsigned char)*p)) -- *p = tolower((unsigned char)*p); -- p++; -- } -- } -- } -- -- return rc_config_value(rc_conf, setting); --} -+extern char **environ; - - bool - rc_conf_yesno(const char *setting) -@@ -135,7 +81,7 @@ env_filter(void) - - /* Add the user defined list of vars */ - env_allow = rc_stringlist_split(rc_conf_value("rc_env_allow"), " "); -- profile = rc_config_load(PROFILE_ENV); -+ profile = rc_config_load(RC_PROFILE_ENV); - - /* Copy the env and work from this so we can manipulate it safely */ - env_list = rc_stringlist_new(); -@@ -181,7 +127,7 @@ env_filter(void) - void - env_config(void) - { -- size_t pplen = strlen(PATH_PREFIX); -+ size_t pplen = strlen(RC_PATH_PREFIX); - char *path; - char *p; - char *e; -@@ -199,16 +145,16 @@ env_config(void) - for a little extra security */ - path = getenv("PATH"); - if (! path) -- setenv("PATH", PATH_PREFIX, 1); -- else if (strncmp (PATH_PREFIX, path, pplen) != 0) { -+ setenv("PATH", RC_PATH_PREFIX, 1); -+ else if (strncmp (RC_PATH_PREFIX, path, pplen) != 0) { - l = strlen(path) + pplen + 3; - e = p = xmalloc(sizeof(char) * l); -- p += snprintf(p, l, "%s", PATH_PREFIX); -+ p += snprintf(p, l, "%s", RC_PATH_PREFIX); - - /* Now go through the env var and only add bits not in our - * PREFIX */ - while ((token = strsep(&path, ":"))) { -- np = npp = xstrdup(PATH_PREFIX); -+ np = npp = xstrdup(RC_PATH_PREFIX); - while ((tok = strsep(&npp, ":"))) - if (strcmp(tok, token) == 0) - break; -@@ -316,7 +262,7 @@ exec_service(const char *service, const char *arg) - fd = svc_lock(basename_c(service)); - if (fd == -1) - return -1; -- -+ - file = rc_service_resolve(service); - if (!exists(file)) { - rc_service_mark(service, RC_SERVICE_STOPPED); -diff --git a/src/rc/rc-plugin.c b/src/rc/rc-plugin.c -index 592eb09..d82e9a9 100644 ---- a/src/rc/rc-plugin.c -+++ b/src/rc/rc-plugin.c -@@ -105,7 +105,7 @@ rc_plugin_load(void) - continue; - } - -- fptr = (int (*)(RC_HOOK, const char*)) -+ fptr = (int (*)(RC_HOOK, const char *)) - dlfunc(h, RC_PLUGIN_HOOK); - if (fptr == NULL) { - eerror("%s: cannot find symbol `%s'", -@@ -200,7 +200,7 @@ rc_plugin_run(RC_HOOK hook, const char *value) - sigaction(SIGUSR1, &sa, NULL); - sigaction(SIGWINCH, &sa, NULL); - sigprocmask(SIG_SETMASK, &old, NULL); -- -+ - rc_in_plugin = true; - close(pfd[0]); - rc_environ_fd = fdopen(pfd[1], "w"); -diff --git a/src/rc/rc.c b/src/rc/rc.c -index b062349..140667a 100644 ---- a/src/rc/rc.c -+++ b/src/rc/rc.c -@@ -153,7 +153,7 @@ cleanup(void) - - #ifdef DEBUG_MEMORY - while (p1) { -- p2 = LIST_NEXT(p1, entries); -+ p2 = LIST_NEXT(p1, entries); - free(p1); - p1 = p2; - } -@@ -315,7 +315,7 @@ open_shell(void) - { - const char *shell; - struct passwd *pw; -- -+ - #ifdef __linux__ - const char *sys = rc_sys(); - -@@ -586,7 +586,7 @@ do_stop_services(const char *newlevel, bool parallel, bool going_down) - } - - crashed = rc_conf_yesno("rc_crashed_stop"); -- -+ - nostop = rc_stringlist_split(rc_conf_value("rc_nostop"), " "); - TAILQ_FOREACH_REVERSE(service, stop_services, rc_stringlist, entries) - { -@@ -773,14 +773,16 @@ handle_bad_signal(int sig) - #endif - - #include "_usage.h" --#define getoptstring "o:s:S" getoptstring_COMMON -+#define getoptstring "a:o:s:S" getoptstring_COMMON - static const struct option longopts[] = { -+ { "applet", 1, NULL, 'a' }, - { "override", 1, NULL, 'o' }, - { "service", 1, NULL, 's' }, - { "sys", 0, NULL, 'S' }, - longopts_COMMON - }; - static const char * const longopts_help[] = { -+ "runs the applet specified by the next argument", - "override the next runlevel to change into\n" - "when leaving single user or boot runlevels", - "runs the service specified with the rest\nof the arguments", -@@ -804,6 +806,7 @@ main(int argc, char **argv) - int opt; - bool parallel; - int regen = 0; -+ int i; - #ifdef __linux__ - char *proc; - char *p; -@@ -822,18 +825,6 @@ main(int argc, char **argv) - if (!applet) - eerrorx("arguments required"); - -- if (argc > 1 && (strcmp(argv[1], "--version") == 0)) { -- printf("%s (OpenRC", applet); -- if ((bootlevel = rc_sys())) -- printf(" [%s]", bootlevel); -- printf(") " VERSION --#ifdef BRANDING -- " (" BRANDING ")" --#endif -- "\n"); -- exit(EXIT_SUCCESS); -- } -- - /* Run our built in applets. If we ran one, we don't return. */ - run_applets(argc, argv); - -@@ -855,6 +846,10 @@ main(int argc, char **argv) - longopts, (int *) 0)) != -1) - { - switch (opt) { -+ case 'a': -+ /* Do nothing, actual logic in run_applets, this -+ * is a placeholder */ -+ break; - case 'o': - if (*optarg == '\0') - optarg = NULL; -@@ -880,18 +875,18 @@ main(int argc, char **argv) - case 'S': - if (rc_conf_value("rc_sys")) { - bootlevel = rc_sys_v2(); -- if(bootlevel) -+ if (bootlevel) - printf("%s\n", bootlevel); - } else { - ewarn("WARNING: rc_sys not defined in rc.conf. Falling back to automatic detection"); - bootlevel = rc_sys_v1(); -- if(bootlevel) -+ if (bootlevel) - printf("%s\n", bootlevel); - } - exit(EXIT_SUCCESS); - /* NOTREACHED */ -- case_RC_COMMON_GETOPT -- } -+ case_RC_COMMON_GETOPT -+ } - } - - newlevel = argv[optind++]; -diff --git a/src/rc/runscript.c b/src/rc/runscript.c -index 1c60c24..0eca487 100644 ---- a/src/rc/runscript.c -+++ b/src/rc/runscript.c -@@ -451,7 +451,7 @@ svc_exec(const char *arg1, const char *arg2) - signal_pipe[0] = signal_pipe[1] = -1; - - sigprocmask (SIG_SETMASK, &oldmask, NULL); -- -+ - if (master_tty >= 0) { - /* Why did we do this? */ - /* signal (SIGWINCH, SIG_IGN); */ -@@ -572,7 +572,7 @@ svc_start_check(void) - RC_SERVICE state; - - state = rc_service_state(service); -- -+ - if (in_background) { - if (!(state & (RC_SERVICE_INACTIVE | RC_SERVICE_STOPPED))) - exit(EXIT_FAILURE); -@@ -583,7 +583,7 @@ svc_start_check(void) - " next runlevel", applet); - } - -- if (exclusive_fd == -1) -+ if (exclusive_fd == -1) - exclusive_fd = svc_lock(applet); - if (exclusive_fd == -1) { - if (errno == EACCES) -@@ -603,7 +603,7 @@ svc_start_check(void) - else if (state & RC_SERVICE_INACTIVE && !in_background) - ewarnx("WARNING: %s has already started, but is inactive", - applet); -- -+ - rc_service_mark(service, RC_SERVICE_STARTING); - hook_out = RC_HOOK_SERVICE_START_OUT; - rc_plugin_run(RC_HOOK_SERVICE_START_IN, applet); -@@ -619,7 +619,7 @@ svc_start_deps(void) - size_t len; - char *p, *tmp; - pid_t pid; -- -+ - errno = 0; - if (rc_conf_yesno("rc_depend_strict") || errno == ENOENT) - depoptions |= RC_DEP_STRICT; -@@ -725,7 +725,7 @@ svc_start_deps(void) - n = 0; - TAILQ_FOREACH(svc, tmplist, entries) { - rc_service_schedule_start(svc->value, service); -- use_services = rc_deptree_depend(deptree, -+ use_services = rc_deptree_depend(deptree, - "iprovide", svc->value); - TAILQ_FOREACH(svc2, use_services, entries) - rc_service_schedule_start(svc2->value, service); -@@ -760,7 +760,7 @@ static void svc_start_real() - { - bool started; - RC_STRING *svc, *svc2; -- -+ - if (ibsave) - setenv("IN_BACKGROUND", ibsave, 1); - hook_out = RC_HOOK_SERVICE_START_DONE; -@@ -873,7 +873,7 @@ svc_stop_deps(RC_SERVICE state) - - if (state & RC_SERVICE_WASINACTIVE) - return; -- -+ - errno = 0; - if (rc_conf_yesno("rc_depend_strict") || errno == ENOENT) - depoptions |= RC_DEP_STRICT; -@@ -941,7 +941,7 @@ svc_stop_deps(RC_SERVICE state) - } - rc_stringlist_free(tmplist); - tmplist = NULL; -- -+ - /* We now wait for other services that may use us and are - * stopping. This is important when a runlevel stops */ - services = rc_deptree_depends(deptree, types_mua, applet_list, -@@ -959,7 +959,7 @@ static void - svc_stop_real(void) - { - bool stopped; -- -+ - /* If we're stopping localmount, set LC_ALL=C so that - * bash doesn't load anything blocking the unmounting of /usr */ - if (strcmp(applet, "localmount") == 0) -@@ -1138,7 +1138,7 @@ runscript(int argc, char **argv) - file = basename_c(argv[1]); - else - file = basename_c(lnk); -- dir = save; -+ dir = save; - } else - file = basename_c(argv[1]); - ll = strlen(dir) + strlen(file) + 2; -@@ -1206,7 +1206,7 @@ runscript(int argc, char **argv) - #endif - - deps = true; -- -+ - /* Punt the first arg as its our service name */ - argc--; - argv++; -@@ -1363,7 +1363,7 @@ runscript(int argc, char **argv) - RC_SERVICE_INACTIVE) - { - TAILQ_FOREACH(svc, -- restart_services, -+ restart_services, - entries) - if (rc_service_state(svc->value) & - RC_SERVICE_STOPPED) -diff --git a/src/rc/start-stop-daemon.c b/src/rc/start-stop-daemon.c -index bd6c7bf..72b8aff 100644 ---- a/src/rc/start-stop-daemon.c -+++ b/src/rc/start-stop-daemon.c -@@ -43,7 +43,7 @@ - #include - #include - #include --#include -+#include - #include - #include - -@@ -322,7 +322,7 @@ get_pid(const char *pidfile, bool quiet) - fclose(fp); - return -1; - } -- -+ - fclose(fp); - - return pid; -@@ -631,7 +631,7 @@ static const struct option longopts[] = { - longopts_COMMON - }; - static const char * const longopts_help[] = { -- "Set an ionice class:data when starting", -+ "Set an ionice class:data when starting", - "Stop daemon", - "Set a nicelevel when starting", - "Retry schedule to use when stopping", -@@ -1210,7 +1210,7 @@ start_stop_daemon(int argc, char **argv) - /* Clean the environment of any RC_ variables */ - env_list = rc_stringlist_new(); - i = 0; -- while(environ[i]) -+ while (environ[i]) - rc_stringlist_add(env_list, environ[i++]); - - #ifdef HAVE_PAM -@@ -1343,7 +1343,7 @@ start_stop_daemon(int argc, char **argv) - if (start_wait > 0) { - struct timespec ts; - bool alive = false; -- -+ - ts.tv_sec = start_wait / 1000; - ts.tv_nsec = (start_wait % 1000) * ONE_MS; - if (nanosleep(&ts, NULL) == -1) { -diff --git a/src/test/.gitignore b/src/test/.gitignore -index c4816ef..1b79b9f 100644 ---- a/src/test/.gitignore -+++ b/src/test/.gitignore -@@ -1,5 +1,6 @@ - einfo.data.out - einfo.funcs.out - librc.funcs.hidden.out -+librc.funcs.hidden.list - rc.data.out --rc.funcs.out -\ No newline at end of file -+rc.funcs.out -diff --git a/src/test/librc.funcs.hidden.list b/src/test/librc.funcs.hidden.list -deleted file mode 100644 -index b661850..0000000 ---- a/src/test/librc.funcs.hidden.list -+++ /dev/null -@@ -1,56 +0,0 @@ --rc_config_list --rc_config_load --rc_config_value --rc_deptree_depend --rc_deptree_depends --rc_deptree_free --rc_deptree_load --rc_deptree_order --rc_deptree_update --rc_deptree_update_needed --rc_find_pids --rc_getline --rc_newer_than --rc_older_than --rc_runlevel_exists --rc_runlevel_get --rc_runlevel_list --rc_runlevel_set --rc_runlevel_stack --rc_runlevel_stacks --rc_runlevel_starting --rc_runlevel_stopping --rc_runlevel_unstack --rc_service_add --rc_service_daemon_set --rc_service_daemons_crashed --rc_service_delete --rc_service_description --rc_service_exists --rc_service_extra_commands --rc_service_in_runlevel --rc_service_mark --rc_service_resolve --rc_service_schedule_clear --rc_service_schedule_start --rc_service_started_daemon --rc_service_state --rc_service_value_get --rc_service_value_set --rc_services_in_runlevel --rc_services_in_runlevel_stacked --rc_services_in_state --rc_services_scheduled --rc_services_scheduled_by --rc_stringlist_add --rc_stringlist_addu --rc_stringlist_delete --rc_stringlist_find --rc_stringlist_free --rc_stringlist_new --rc_stringlist_sort --rc_stringlist_split --rc_sys --rc_sys_v1 --rc_sys_v2 --rc_yesno -diff --git a/src/test/rc.funcs.list b/src/test/rc.funcs.list -index 0aac8f9..a8b011f 100644 ---- a/src/test/rc.funcs.list -+++ b/src/test/rc.funcs.list -@@ -1,3 +1,5 @@ -+rc_conf_value -+rc_conf_value@@RC_1.0 - rc_config_list - rc_config_list@@RC_1.0 - rc_config_load -@@ -12,6 +14,8 @@ rc_deptree_free - rc_deptree_free@@RC_1.0 - rc_deptree_load - rc_deptree_load@@RC_1.0 -+rc_deptree_load_file -+rc_deptree_load_file@@RC_1.0 - rc_deptree_order - rc_deptree_order@@RC_1.0 - rc_deptree_update -diff --git a/src/test/runtests.sh b/src/test/runtests.sh -index 076bd75..4731bd7 100755 ---- a/src/test/runtests.sh -+++ b/src/test/runtests.sh -@@ -57,6 +57,7 @@ sed -n '/^librc_hidden_proto/s:.*(\(.*\))$:\1:p' ${librc_srcdir}/librc.h \ - | LC_ALL=C sort -u \ - > librc.funcs.hidden.list - readelf -Wr $(grep -l '#include[[:space:]]"librc\.h"' ${librc_srcdir}/*.c | sed 's:\.c$:.o:') \ -+ | egrep -v -e 'R_PARISC_(DP|SEG)REL' \ - | awk '$5 ~ /^rc_/ {print $5}' \ - | LC_ALL=C sort -u \ - | egrep -v '^rc_environ_fd$' \ -@@ -66,6 +67,50 @@ syms=$(diff -u librc.funcs.hidden.list librc.funcs.hidden.out | sed -n '/^+[^+]/ - eend $? "Missing hidden defs:"$'\n'"${syms}" - ret=$(($ret + $?)) - -+ebegin "Checking trailing whitespace in code" -+# XXX: Should we check man pages too ? -+out=$(cd ${top_srcdir}; find */ \ -+ '(' -name '*.[ch]' -o -name '*.in' -o -name '*.sh' ')' \ -+ -exec grep -n -E '[[:space:]]+$' {} +) -+[ -z "${out}" ] -+eend $? "Trailing whitespace needs to be deleted:"$'\n'"${out}" -+ -+ebegin "Checking trailing newlines in code" -+out=$(cd ${top_srcdir}; -+ for f in `find */ -name '*.[ch]'` ; do -+ sed -n -e :a -e '/^\n*$/{$q1;N;ba' -e '}' $f || echo $f -+ done) -+[ -z "${out}" ] -+eend $? "Trailing newlines need to be deleted:"$'\n'"${out}" -+ -+ebegin "Checking for obsolete functions" -+out=$(cd ${top_srcdir}; find src -name '*.[ch]' \ -+ -exec grep -n -E '\<(malloc|memory|sys/(errno|fcntl|signal|stropts|termios|unistd))\.h\>' {} +) -+[ -z "${out}" ] -+eend $? "Avoid these obsolete functions:"$'\n'"${out}" -+ -+ebegin "Checking for x* func usage" -+out=$(cd ${top_srcdir}; find src -name '*.[ch]' \ -+ -exec grep -n -E '\<(malloc|strdup)[[:space:]]*\(' {} + \ -+ | grep -v \ -+ -e src/includes/rc-misc.h \ -+ -e src/libeinfo/libeinfo.c) -+[ -z "${out}" ] -+eend $? "These need to be using the x* variant:"$'\n'"${out}" -+ -+ebegin "Checking spacing style" -+out=$(cd ${top_srcdir}; find src -name '*.[ch]' \ -+ -exec grep -n -E \ -+ -e '\<(for|if|switch|while)\(' \ -+ -e '\<(for|if|switch|while) \( ' \ -+ -e ' ;' \ -+ -e '[[:space:]]$' \ -+ -e '\){' \ -+ -e '(^|[^:])//' \ -+ {} +) -+[ -z "${out}" ] -+eend $? "These lines violate style rules:"$'\n'"${out}" -+ - einfo "Running unit tests" - eindent - for u in units/*; do -diff --git a/test/setup_env.sh b/test/setup_env.sh -index 6794913..9f3a3fd 100755 ---- a/test/setup_env.sh -+++ b/test/setup_env.sh -@@ -9,14 +9,18 @@ srcdir=${srcdir:-.} - top_builddir=${top_builddir:-${top_srcdir}} - builddir=${builddir:-${srcdir}} - --if ! . ${top_srcdir}/sh/functions.sh; then -+export LD_LIBRARY_PATH=${top_builddir}/src/libeinfo:${top_builddir}/src/librc:${LD_LIBRARY_PATH} -+export PATH=${top_builddir}/src/rc:${PATH} -+ -+ -+if [ ! -f ${top_srcdir}/sh/functions.sh ] ; then -+ echo "functions.sh not yet created !?" 1>&2 -+ exit 1 -+elif ! . ${top_srcdir}/sh/functions.sh; then - echo "Sourcing functions.sh failed !?" 1>&2 - exit 1 - fi - --export LD_LIBRARY_PATH=${top_builddir}/src/libeinfo:${top_builddir}/src/librc:${LD_LIBRARY_PATH} --export PATH=${top_builddir}/src/rc:${PATH} -- - cd ${top_srcdir}/src/rc - ${MAKE:-make} links >/dev/null - cd - -- cgit v1.2.3