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 command line 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>/i Locate ${HOME}/.duerc.%{RCFILE:s/^\///:s/[\/]/-/g} Locate path/file/regex:regex_inside_file foreach given locate { for each (locate all possible rcfiles working out the regex) { 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 += %env from 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); }