Compare commits

...

14 Commits

Author SHA1 Message Date
Robin H. Johnson
aac509837e Bump version. 2012-03-11 13:04:51 -07:00
Robin H. Johnson
2a84a8081e Merge branch 'master' into openrc-0.9.9.x 2012-03-11 12:56:13 -07:00
Robin H. Johnson
b27a9003bb net/ifconfig: The location of the ifconfig binary has changed
The location of the ifconfig binary has changed in
net-tools-1.60_p20120127084908, and if we do not check both locations
for it, the user will get errors like:
_is_wireless: command not found
_exists: command not found

X-Gentoo-Bug: 407757
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=407757
2012-03-11 12:54:48 -07:00
William Hubbs
9fa54a8e80 Runscript: allow extra_commands to be run in chroots
The commands defined in the extra_commands variable do not depend on
whether the service is stopped or started, so it is valid to run them in
chroot environments.

Also, add a note to the runscript man page about the commands in
extra_commands being able to run whether or not the service is started.

Reported-by: Robin Johnson <robbat2@gentoo.org>
X-Gentoo-Bug: 406713
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=406713
2012-03-03 09:22:44 -06:00
Robin H. Johnson
7a1e4ef606 Bug #405491: _exists can give a false negative since /proc/net/dev can be slow to update sometimes when interfaces are added rapidly. Use sysfs instead.
Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
2012-03-02 19:54:48 +00:00
Robin H. Johnson
0dc9431bdb Add a potential future problem I can see with metric calculation and interfaces that change often.
Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
2012-03-02 19:51:09 +00:00
William Hubbs
0fa164dff2 Clarify the meaning of the clock_hctosys variable
Reported-by: Ian Abbott <ian@abbott.org>
X-Gentoo-Bug: 405861
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=405861
2012-03-02 11:00:25 -06:00
William Hubbs
ba457f1fed Release openrc-0.9.9.2 2012-02-25 20:50:36 -06:00
William Hubbs
722871c0ae librc: make rc_proc_getent available for all operating systems
This looks up an option on the kernel command line. For now, it works on
linux and returns NULL on the bsds, but we are definitely open to
patches for that side.
2012-02-25 15:41:31 -06:00
William Hubbs
582c8e9868 librc: make rc_proc_getent available for all operating systems
This looks up an option on the kernel command line. For now, itworks on
linux and returns NULL on the bsds, but we are definitely open to
patches for that side.
2012-02-25 15:00:03 -06:00
Christian Ruppert
de6323ba51 Fix rc_proc_getent() undeclared on BSD
X-Gentoo-Bug: 405713
X-Gentoo-Bug-URL: https://bugs.gentoo.org/405713
Reported-by: Dmitri Bogomolov <4glitch@gmail.com>
2012-02-25 17:56:24 +01:00
William Hubbs
d670dbddf7 Release openrc-0.9.9.1 2012-02-24 11:13:27 -06:00
William Hubbs
f1a19aed78 Skip pam if running as root
Reported-by: Piotr Karbowski <piotr.karbowski@gmail.com>
X-Gentoo-Bug: 386623
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=386623
2012-02-24 09:06:51 -06:00
William Hubbs
3272261479 Skip pam if running as root
Reported-by: Piotr Karbowski <piotr.karbowski@gmail.com>
X-Gentoo-Bug: 386623
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=386623
2012-02-23 16:47:52 -06:00
10 changed files with 71 additions and 47 deletions

View File

@@ -1,3 +1,3 @@
NAME= openrc
VERSION= 0.9.9
VERSION= 0.9.9.3
PKG= ${NAME}-${VERSION}

14
TODO
View File

@@ -5,3 +5,17 @@
- oldnet[bridging]: Review setting of bridge configuration on dynamic interface add
- Document rc-depend binary.
- _ifindex is not a reliable means of calculating metrics:
_ifindex is used for calculating metrics for new devices but has a major
problem: Since it's only the nth entry in /proc/net/dev
And devices may be removed from that file, and reordered, you won't always
get the same result.
If you do:
- add eth0 - _ifindex (eth0=0)
- add vlan1 - _ifindex (eth0=0,vlan1=1)
- add vlan2 - _ifindex (eth0=0,vlan1=1,vlan2=2)
- rem vlan1 - _ifindex (eth0=0,vlan2=1)
- add vlan3 - _ifindex (eth0=0,vlan2=1,vlan3=2)
Now your routing table has entries for both vlan2 and vlan3 with a metric of 2.

View File

@@ -4,9 +4,11 @@
# you should set it to "local".
clock="UTC"
# 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.
# If you want the hwclock script to set the system time (software clock)
# to match the current hardware clock during bootup, leave this
# commented out.
# However, you can set this to "NO" ifyou are running a modern kernel
# with CONFIG_RTC_HCTOSYS set to y and your hardware clock set to UTC.
#clock_hctosys="YES"
# If you do not want to set the hardware clock to the current system

View File

@@ -92,7 +92,8 @@ or stopping them.
The following variables affect the service script:
.Bl -tag -width "RC_DEFAULTLEVEL"
.It Ar extra_commands
Space separated list of extra commands the service defines.
Space separated list of extra commands the service defines. These should
not depend on the service being stopped or started.
.It Ar extra_started_commands
Space separated list of extra commands the service defines. These only work if
the service has already been started.

View File

@@ -3,7 +3,7 @@
ifconfig_depend()
{
program /sbin/ifconfig
program /sbin/ifconfig /bin/ifconfig
provide interface
}
@@ -19,7 +19,7 @@ _down()
_exists()
{
grep -Eq "^[[:space:]]*${IFACE}:" /proc/net/dev
[ -e /sys/class/net/"$IFACE" ]
}
_ifindex()

View File

@@ -20,7 +20,7 @@ _down()
_exists()
{
grep -Eq "^[[:space:]]*${IFACE}:" /proc/net/dev
[ -e /sys/class/net/"$IFACE" ]
}
_ifindex()

View File

@@ -4,6 +4,22 @@
# Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
# Released under the 2-clause BSD license.
verify_boot()
{
if [ ! -e ${RC_SVCDIR}/softlevel ]; then
eerror "You are attempting to run an openrc service on a"
eerror "system which openrc did not boot."
eerror "You may be inside a chroot or you may have used"
eerror "another initialization system to boot this system."
eerror "In this situation, you will get unpredictable results!"
eerror
eerror "If you really want to do this, issue the following command:"
eerror "touch ${RC_SVCDIR}/softlevel"
exit 1
fi
return 0
}
sourcex()
{
if [ "$1" = "-e" ]; then
@@ -24,18 +40,6 @@ if sourcex -e "/sbin/livecd-functions.sh"; then
livecd_read_commandline
fi
if [ ! -e ${RC_SVCDIR}/softlevel ]; then
eerror "You are attempting to run an openrc service on a"
eerror "system which openrc did not boot."
eerror "You may be inside a chroot or you may have used"
eerror "another initialization system to boot this system."
eerror "In this situation, you will get unpredictable results!"
eerror
eerror "If you really want to do this, issue the following command:"
eerror "touch ${RC_SVCDIR}/softlevel"
exit 1
fi
if [ -z "$1" -o -z "$2" ]; then
eerror "$RC_SVCNAME: not enough arguments"
exit 1
@@ -256,7 +260,7 @@ while [ -n "$1" ]; do
# we can run this command
for _cmd in $extra_started_commands; do
if [ "$_cmd" = "$1" ]; then
if ! service_started; then
if verify_boot && ! service_started; then
eerror "$RC_SVCNAME: cannot \`$1' as it has not been started"
exit 1
fi
@@ -266,13 +270,16 @@ while [ -n "$1" ]; do
# we can run this command
for _cmd in $extra_stopped_commands; do
if [ "$_cmd" = "$1" ]; then
if ! service_stopped; then
if verify_boot && ! service_stopped; then
eerror "$RC_SVCNAME: cannot \`$1' as it has not been stopped"
exit 1
fi
fi
done
unset _cmd
case $1 in
start|stop|status) verify_boot;;
esac
if [ "$(command -v "$1_pre")" = "$1_pre" ]
then
"$1"_pre || exit $?

View File

@@ -128,10 +128,10 @@ rc_getline(char **line, size_t *len, FILE *fp)
}
librc_hidden_def(rc_getline)
#ifdef __linux__
char *
rc_proc_getent(const char *ent)
{
#ifdef __linux__
FILE *fp;
char *proc, *p, *value = NULL;
size_t i, len;
@@ -171,9 +171,11 @@ rc_proc_getent(const char *ent)
free(proc);
return value;
#else
return NULL;
#endif
}
librc_hidden_def(rc_proc_getent)
#endif
RC_STRINGLIST *
rc_config_list(const char *file)

View File

@@ -360,12 +360,10 @@ bool rc_newer_than(const char *, const char *, time_t *, char *);
* @return true if source is older than target, otherwise false */
bool rc_older_than(const char *, const char *, time_t *, char *);
#ifdef __linux__
/*! Read variables/values from /proc/cmdline
* @param value
* @return pointer to the value, otherwise NULL */
char *rc_proc_getent(const char *);
#endif
/*! Update the cached dependency tree if it's older than any init script,
* its configuration file or an external configuration file the init script

View File

@@ -1178,12 +1178,9 @@ start_stop_daemon(int argc, char **argv)
}
#ifdef HAVE_PAM
if (changeuser != NULL)
if (changeuser != NULL) {
pamr = pam_start("start-stop-daemon",
changeuser, &conv, &pamh);
else
pamr = pam_start("start-stop-daemon",
"nobody", &conv, &pamh);
if (pamr == PAM_SUCCESS)
pamr = pam_acct_mgmt(pamh, PAM_SILENT);
@@ -1192,6 +1189,7 @@ start_stop_daemon(int argc, char **argv)
if (pamr != PAM_SUCCESS)
eerrorx("%s: pam error: %s",
applet, pam_strerror(pamh, pamr));
}
#endif
if (gid && setgid(gid))
@@ -1219,6 +1217,7 @@ start_stop_daemon(int argc, char **argv)
rc_stringlist_add(env_list, environ[i++]);
#ifdef HAVE_PAM
if (changeuser != NULL) {
pamenv = (const char *const *)pam_getenvlist(pamh);
if (pamenv) {
while (*pamenv) {
@@ -1230,6 +1229,7 @@ start_stop_daemon(int argc, char **argv)
pamenv++;
}
}
}
#endif
TAILQ_FOREACH(env, env_list, entries) {
@@ -1304,7 +1304,7 @@ start_stop_daemon(int argc, char **argv)
setsid();
execvp(exec, argv);
#ifdef HAVE_PAM
if (pamr == PAM_SUCCESS)
if (changeuser != NULL && pamr == PAM_SUCCESS)
pam_close_session(pamh, PAM_SILENT);
#endif
eerrorx("%s: failed to exec `%s': %s",