ossp-pkg/rc/00TODO
1.14
00TODO: Tasks left to accomplish before rc is complete
Spec fehlt
Command interpreter (probably goes in rc.usecase.pod)
Beispiel
Default
Error
Control flow
Errors during execution
Multiple sections given
Wildcard 'all' given
Both wildcard and multiple sections
Avoid a silent failure when giving non-existent run commands (Marcus.)
Use case - give 'restart' command in place of 'start' to stopped prog
User assumes stop implicitly dropped if program not running
Consider
Removing the OSSP_RC_DEACT deactivation feature (thl.)
Make return code and error definitions unique to OSSP rc.
Offer include directive in config file.
Dynamic handling of command interpreter option.
Environment of manpage has redundant text.
Must do
Strip local popt code, and move in OSSP popt library.
Translate rc bourne shell script to ANSI C.
Finish man page. Start latex or Docbook guide.
If a variable is defined for which no default exists, warn user (Scholli.)
/-------------------OSSP rc Inhalt------------------\
| Manpage |
| rc.1 Section 1 oder 8-Konflict? |
| rc-sample.5 Vielleicht umnennen rc.usecases.5 |
| rc.conf.5 Beschreibung aber kein Beispiel |
| |
| Geliefert |
| rc.env Leer |
| rc.conf Ausgekommentet Beispiel |
| |
| Beispiele |
| rc.example Soll rc.fooboar umgenannt werden |
\---------------------------------------------------/
Pseudocode
***********************************
* psoudocode implementation of rc *
***********************************
parse options
read and merge all "rc.conf" files
parse "Locate"
Locate /cw/etc/rc.d/rc.%{RCFILE:s/^all$/*/}
Locate /cw/local/etc/rc.d/rc.%{RCFILE:s/^all$/*/}
Locate %{RCFILE}/.duerc
Locate ${HOME}/.duerc:m/^<dir path="%{RCFILE}">(.*)<\/dir>/i
Locate ${HOME}/.duerc.%{RCFILE:s/^\///:s/[\/]/-/g}
Locate path/file/regex:regex_inside_file
foreach locate {
for each (locate all possible rcfiles after variable expansion and shell globbing) {
continue if (absolute path seen previously) //avoid duplicates
if (filename matches given rcfile && securitycheck(RequireUmask, RequireOwner, RequireGroup))
load file and grab only a part of the file according to info after colon given in "locate"
}
}
foreach located_rcfile_fraction {
parse rcfile into blocks according to --ParseSectionDef
take out %config section according to --NameConfig
take out %common section according to --NameCommon
take out any sections given on command line
}
foreach section {
if (multiple rcfiles, i.e. all)
sort rcfiles by section priority.
foreach rcfile {
script = "";
script += %config from rcfile
script += rc.env and override it
create_script_for_rcfile(script, section, parent=no)
expand our internal variables
execute, print or printeval script with user & group priveleges
and command interpreter according to options or section header
}
}
EXIT
create_script_for_rcfile(script, section, parent)
{
script += "${body}" //start with a pseudo value
if (!parent) { //only one rc.func!?
replace ${body} with %common from rc.func
if no ${body} assume prepend
}
replace ${body} with %common from rcfile
if no ${body} assume prepend
if (!parent) { //only one rc.func!?
replace ${body} with %section from rc.func
if no ${body} assume prepend
}
replace ${body} with %section from rcfile
expand references using --ParseSectionRef and calling create_script_for_rcfile(section, parent=yes);
}