summaryrefslogtreecommitdiff
path: root/src/rc
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2008-01-13 17:47:23 +0000
committerRoy Marples <roy@marples.name>2008-01-13 17:47:23 +0000
commit87e4e4410cb542f3b56989d02e088c5efdfaf157 (patch)
tree14ffb2f5a665b6a9015925a8fed2ed0bb5fdc164 /src/rc
parentabc7a79755c82ed5b6737901d71f8f7f15e1d992 (diff)
downloadopenrc-87e4e4410cb542f3b56989d02e088c5efdfaf157.tar.gz
openrc-87e4e4410cb542f3b56989d02e088c5efdfaf157.tar.bz2
openrc-87e4e4410cb542f3b56989d02e088c5efdfaf157.tar.xz
Remove rc_service_plugable function and make it private as it needs to read from our config file.
Diffstat (limited to 'src/rc')
-rw-r--r--src/rc/rc-misc.c38
-rw-r--r--src/rc/rc.c6
-rw-r--r--src/rc/runscript.c2
3 files changed, 42 insertions, 4 deletions
diff --git a/src/rc/rc-misc.c b/src/rc/rc-misc.c
index 0d6be40..fe6022e 100644
--- a/src/rc/rc-misc.c
+++ b/src/rc/rc-misc.c
@@ -387,3 +387,41 @@ char **env_config (void)
free (runlevel);
return (env);
}
+
+bool service_plugable (const char *service)
+{
+ char *list;
+ char *p;
+ char *star;
+ char *token;
+ bool allow = true;
+ char *match = rc_conf_value ("rc_plug_services");
+ if (! match)
+ return true;
+
+ list = xstrdup (match);
+ p = list;
+ while ((token = strsep (&p, " "))) {
+ bool truefalse = true;
+ if (token[0] == '!') {
+ truefalse = false;
+ token++;
+ }
+
+ star = strchr (token, '*');
+ if (star) {
+ if (strncmp (service, token, star - token) == 0) {
+ allow = truefalse;
+ break;
+ }
+ } else {
+ if (strcmp (service, token) == 0) {
+ allow = truefalse;
+ break;
+ }
+ }
+ }
+
+ free (list);
+ return (allow);
+}
diff --git a/src/rc/rc.c b/src/rc/rc.c
index 4bf6541..6fcbd98 100644
--- a/src/rc/rc.c
+++ b/src/rc/rc.c
@@ -1195,7 +1195,7 @@ int main (int argc, char **argv)
continue;
if (rc_service_exists (d->d_name) &&
- rc_service_plugable (d->d_name))
+ service_plugable (d->d_name))
rc_service_mark (d->d_name, RC_SERVICE_COLDPLUGGED);
i = strlen (DEVBOOT "/") + strlen (d->d_name) + 1;
@@ -1229,7 +1229,7 @@ int main (int argc, char **argv)
tmp = xmalloc (sizeof (char) * i);
snprintf (tmp, i, "net.%s", d->d_name);
if (rc_service_exists (tmp) &&
- rc_service_plugable (tmp))
+ service_plugable (tmp))
rc_service_mark (tmp, RC_SERVICE_COLDPLUGGED);
CHAR_FREE (tmp);
}
@@ -1250,7 +1250,7 @@ int main (int argc, char **argv)
tmp = xmalloc (sizeof (char) * i);
snprintf (tmp, i, "moused.%s", d->d_name);
if (rc_service_exists (tmp) &&
- rc_service_plugable (tmp))
+ service_plugable (tmp))
rc_service_mark (tmp, RC_SERVICE_COLDPLUGGED);
CHAR_FREE (tmp);
}
diff --git a/src/rc/runscript.c b/src/rc/runscript.c
index 1f3d662..e136e94 100644
--- a/src/rc/runscript.c
+++ b/src/rc/runscript.c
@@ -1185,7 +1185,7 @@ int runscript (int argc, char **argv)
}
if (rc_yesno (getenv ("IN_HOTPLUG"))) {
- if (! rc_conf_yesno ("rc_hotplug") || ! rc_service_plugable (applet))
+ if (! rc_conf_yesno ("rc_hotplug") || ! service_plugable (applet))
eerrorx ("%s: not allowed to be hotplugged", applet);
}