ossp-pkg/rc/00TODO
1.11
00TODO: Tasks left to accomplish before rc is complete
Consider
Make return code and error definitions unique to OSSP rc.
Offer include directive in config file.
Standardize rc.conf.
Rename rc.conf to rc.config.
New rc.conf specifies options like syslog.conf or resolv.conf does.
Must do
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.)
Avoid a silent failure when giving non-existent run commands (Marcus.)
Possible problems
Abstract syntax of rc.file identifiers
Need to recognize language syntax, i.e. set, block von XML?
Is a regex enough to describe a syntax or do we need more?
Cases XML, M4, asn.1, ...
Automated environment
Stock rc.func includes AddPath, DelPath, PermMask.
Reccommended .bashrc includes rcEnter() and rcExit().
Error handling
Classic error, give 'restart' command in place of 'start' to stopped prog
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);
}