OSSP CVS Repository

ossp - ossp-pkg/rc/00TODO 1.10
Not logged in
[Honeypot]  [Browse]  [Directory]  [Home]  [Login
[Reports]  [Search]  [Ticket]  [Timeline
  [Raw

ossp-pkg/rc/00TODO 1.10
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 path="%{RCFILE}">(.*)<\/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);
}

CVSTrac 2.0.1