Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
DISCONTINUED:openSUSE:11.1:Update
insserv
insserv-1.12.0.dif
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File insserv-1.12.0.dif of Package insserv
--- insserv.8.in +++ insserv.8.in 2008-08-12 15:03:04.628184000 +0200 @@ -195,7 +195,7 @@ Here is an example for # System logger is operational $syslog syslog - # All network daemons are running + # All network daemons are running (This was removed in LSB 1.2) $netdaemons portmap inetd # Services which need to be interactive @@ -215,7 +215,19 @@ are keywords. Currently is the only know keyword for marking a service as an interactive one, e.g. a service which requires a passphrase or password input during boot -or runlevel change. +or runlevel change. The special facility +.B $null +is used to enforce an empty dependency in case of +.B Should-Stop +and +@@BEGIN_SUSE@@ +.B Required-Stop +otherwise insserv assumes the same dependencies as for the +.B Start +case. +@@ELSE_SUSE@@ +.BR Required-Stop . +@@END_SUSE@@ .P Beside the defined .B System Facilities @@ -332,6 +344,10 @@ or simple provide a missing LSB comment by placing a file with the new LSB comment header using the same name as the boot or init script in the directory .IR /etc/insserv/overrides/ . +For third party boot scripts without LSB header it is possible to +add a file with the same name in the directory +.I /usr/share/insserv/overrides/ +to make them completely LSB compliant. .\" .SH EXIT CODES The exit codes have the following conditions: --- insserv.c +++ insserv.c 2008-09-12 12:33:05.868217615 +0200 @@ -290,6 +290,8 @@ static void rememberreq(service_t * rest requires(here, need, type); break; case '$': + if (strcasecmp(token, "$null") == 0) + break; if (strcasecmp(token, "$all") == 0) { serv->attr.flags |= SERV_ALL; break; @@ -1696,6 +1698,11 @@ static void scan_script_locations(const } lsb = scan_script_defaults(dfd, d->d_name, override_path, &name, true, ignore); + if (!name) { + warn("warning: script is corrupt or invalid: %s/%s%s\n", path, rcd, d->d_name); + continue; + } + if (!script_inf.provides || script_inf.provides == empty) script_inf.provides = xstrdup(ptr); @@ -2238,6 +2245,7 @@ int main (int argc, char *argv[]) boolean del = false; boolean defaults = false; boolean ignore = false; + boolean loadarg = false; myname = basename(*argv); @@ -2305,7 +2313,9 @@ int main (int argc, char *argv[]) argv += optind; argc -= optind; - if (!argc && del) + if (argc) + loadarg = true; + else if (del) error("usage: %s [[-r] init_script|init_directory]\n", myname); if (*argv) { @@ -2357,7 +2367,19 @@ int main (int argc, char *argv[]) if (strcmp(path, INITDIR) != 0) { char * tmp; - root = xstrdup(path); + if (*path != '/') { + char * pwd = getcwd((char*)0, 0); + size_t len = strlen(pwd)+1+strlen(path); + root = (char*)malloc(len); + if (!root) + error("%s", strerror(errno)); + strcpy(root, pwd); + if (pwd[1]) + strcat(root, "/"); + strcat(root, path); + free(pwd); + } else + root = xstrdup(path); if ((tmp = strstr(root, INITDIR))) { *tmp = '\0'; } else { @@ -2490,17 +2512,45 @@ int main (int argc, char *argv[]) /* * Scan now all scripts found in the init.d/ directory */ - while ((d = readdir(initdir)) != (struct dirent*)0) { - const boolean isarg = chkfor(d->d_name, argv, argc); + for (;;) { service_t * service = (service_t*)0; char * token; char * begin = (char*)0; /* hold start pointer of strings handled by strsep() */ boolean hard = false; + boolean isarg = false; uchar lsb = 0; #if defined(DEBUG) && (DEBUG > 0) int nobug = 0; #endif + if ((d = readdir(initdir)) == (struct dirent*)0) { + /* + * If first script in argument list was loaded in advance, then + * rewind the init.d/ directory stream and attempt to load all + * other scripts. + */ + if (loadarg) { + loadarg = false; + rewinddir(initdir); + continue; + } + break; + } + + isarg = chkfor(d->d_name, argv, argc); + + /* + * Load first script in argument list before all other scripts. This + * avoids problems with loading scripts in underterministic sequence + * returned by readdir(3). + */ + if (loadarg && !isarg) + continue; + if (loadarg && isarg && (curr_argc != 0)) + continue; + if (!loadarg && isarg && (curr_argc == 0)) + continue; + if (*d->d_name == '.') continue; errno = 0;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor