Remove rc_service_plugable function and make it private as it needs to read from our config file.
This commit is contained in:
parent
abc7a79755
commit
87e4e4410c
@ -115,6 +115,7 @@ char *rc_conf_value (const char *var);
|
|||||||
bool rc_conf_yesno (const char *var);
|
bool rc_conf_yesno (const char *var);
|
||||||
char **env_filter (void);
|
char **env_filter (void);
|
||||||
char **env_config (void);
|
char **env_config (void);
|
||||||
|
bool service_plugable (const char *service);
|
||||||
|
|
||||||
/* basename_c never modifies the argument. As such, if there is a trailing
|
/* basename_c never modifies the argument. As such, if there is a trailing
|
||||||
* slash then an empty string is returned. */
|
* slash then an empty string is returned. */
|
||||||
|
@ -833,42 +833,3 @@ char **rc_services_scheduled (const char *service)
|
|||||||
return (list);
|
return (list);
|
||||||
}
|
}
|
||||||
librc_hidden_def(rc_services_scheduled)
|
librc_hidden_def(rc_services_scheduled)
|
||||||
|
|
||||||
bool rc_service_plugable (const char *service)
|
|
||||||
{
|
|
||||||
char *list;
|
|
||||||
char *p;
|
|
||||||
char *star;
|
|
||||||
char *token;
|
|
||||||
bool allow = true;
|
|
||||||
char *match = getenv ("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);
|
|
||||||
}
|
|
||||||
librc_hidden_def(rc_service_plugable)
|
|
||||||
|
@ -99,7 +99,6 @@ librc_hidden_proto(rc_service_exists)
|
|||||||
librc_hidden_proto(rc_service_extra_commands)
|
librc_hidden_proto(rc_service_extra_commands)
|
||||||
librc_hidden_proto(rc_service_in_runlevel)
|
librc_hidden_proto(rc_service_in_runlevel)
|
||||||
librc_hidden_proto(rc_service_mark)
|
librc_hidden_proto(rc_service_mark)
|
||||||
librc_hidden_proto(rc_service_plugable)
|
|
||||||
librc_hidden_proto(rc_service_resolve)
|
librc_hidden_proto(rc_service_resolve)
|
||||||
librc_hidden_proto(rc_service_schedule_clear)
|
librc_hidden_proto(rc_service_schedule_clear)
|
||||||
librc_hidden_proto(rc_service_schedule_start)
|
librc_hidden_proto(rc_service_schedule_start)
|
||||||
|
@ -148,11 +148,6 @@ bool rc_service_mark (const char *service, rc_service_state_t state);
|
|||||||
* @return NULL terminated string list of commands */
|
* @return NULL terminated string list of commands */
|
||||||
char **rc_service_extra_commands (const char *service);
|
char **rc_service_extra_commands (const char *service);
|
||||||
|
|
||||||
/*! Check if the service is allowed to be hot/cold plugged
|
|
||||||
* @param service to check
|
|
||||||
* @return true if allowed, otherwise false */
|
|
||||||
bool rc_service_plugable (const char *service);
|
|
||||||
|
|
||||||
/*! Resolves a service name to its full path.
|
/*! Resolves a service name to its full path.
|
||||||
* @param service to check
|
* @param service to check
|
||||||
* @return pointer to full path of service */
|
* @return pointer to full path of service */
|
||||||
|
@ -28,7 +28,6 @@ global:
|
|||||||
rc_service_in_runlevel;
|
rc_service_in_runlevel;
|
||||||
rc_service_mark;
|
rc_service_mark;
|
||||||
rc_service_options;
|
rc_service_options;
|
||||||
rc_service_plugable;
|
|
||||||
rc_service_resolve;
|
rc_service_resolve;
|
||||||
rc_service_schedule_clear;
|
rc_service_schedule_clear;
|
||||||
rc_service_schedule_start;
|
rc_service_schedule_start;
|
||||||
|
@ -387,3 +387,41 @@ char **env_config (void)
|
|||||||
free (runlevel);
|
free (runlevel);
|
||||||
return (env);
|
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);
|
||||||
|
}
|
||||||
|
@ -1195,7 +1195,7 @@ int main (int argc, char **argv)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (rc_service_exists (d->d_name) &&
|
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);
|
rc_service_mark (d->d_name, RC_SERVICE_COLDPLUGGED);
|
||||||
|
|
||||||
i = strlen (DEVBOOT "/") + strlen (d->d_name) + 1;
|
i = strlen (DEVBOOT "/") + strlen (d->d_name) + 1;
|
||||||
@ -1229,7 +1229,7 @@ int main (int argc, char **argv)
|
|||||||
tmp = xmalloc (sizeof (char) * i);
|
tmp = xmalloc (sizeof (char) * i);
|
||||||
snprintf (tmp, i, "net.%s", d->d_name);
|
snprintf (tmp, i, "net.%s", d->d_name);
|
||||||
if (rc_service_exists (tmp) &&
|
if (rc_service_exists (tmp) &&
|
||||||
rc_service_plugable (tmp))
|
service_plugable (tmp))
|
||||||
rc_service_mark (tmp, RC_SERVICE_COLDPLUGGED);
|
rc_service_mark (tmp, RC_SERVICE_COLDPLUGGED);
|
||||||
CHAR_FREE (tmp);
|
CHAR_FREE (tmp);
|
||||||
}
|
}
|
||||||
@ -1250,7 +1250,7 @@ int main (int argc, char **argv)
|
|||||||
tmp = xmalloc (sizeof (char) * i);
|
tmp = xmalloc (sizeof (char) * i);
|
||||||
snprintf (tmp, i, "moused.%s", d->d_name);
|
snprintf (tmp, i, "moused.%s", d->d_name);
|
||||||
if (rc_service_exists (tmp) &&
|
if (rc_service_exists (tmp) &&
|
||||||
rc_service_plugable (tmp))
|
service_plugable (tmp))
|
||||||
rc_service_mark (tmp, RC_SERVICE_COLDPLUGGED);
|
rc_service_mark (tmp, RC_SERVICE_COLDPLUGGED);
|
||||||
CHAR_FREE (tmp);
|
CHAR_FREE (tmp);
|
||||||
}
|
}
|
||||||
|
@ -1185,7 +1185,7 @@ int runscript (int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (rc_yesno (getenv ("IN_HOTPLUG"))) {
|
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);
|
eerrorx ("%s: not allowed to be hotplugged", applet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user