## ## rc.example - rcfile template ## ## This file examines different ways of writing runcommands for a ## ## program. If used in production, this file would be different. It ## ## would have a name like 'rc.helloworld' and contain runcommands ## ## for the 'helloworld' program. It would also have only one ## ## notation. A sample is repeated in this document using rc (native), ## ## XML, and ASN.1 notation. The same rcfile semantics are repeated ## ## only to show what is possible through the abstract syntax offered ## ## by OSSP rc. ## ## ## ## To learn what regular expressions to use with the example ## ## example syntaxes in this document, refer to the rc.conf file ## ## included with the original OSSP rc distribution. It has the ## ## corresponding regular expressions settings. ## ## ## # Generic runcommands for example daemon. Using # # default symbols and conventional identifiers. # %confvars sftpd_enable="yes" sftpd_anonymous="yes" sftpd_flags="" %common timeStamp # Function from rc.func library %start -p 200 -u root /usr/local/sbin/sftpd -c %stop -p 200 -u root kill -TERM `cat /var/sftp/run/sftpd.pid` %reload -u root kill -HUP `cat /var/sftp/run/sftpd.pid` %restart -u root @stop # Reference to term section sleep 2 @start # Reference to start section %status -c /usr/bin/perl print STDERR "Sftpd status report"; for ... %error # We have a rc (not user-level) error # Very rough representation of built-in rc language +syslogit DAEMON CRITICAL; +if ${sftpd_error} +outconsole ${sftpd_error}; +outconsole "Runcommand-level error in line "; +lineno SCRIPT; # Not +lineno ABSOLUTE; +outconsole " of rcfile "; +rcfilename; %default # Gets hit if no other section label matches $HOME/bin/popup "Missing section in rc.sftpd!" # Run custom app @error # Reference to error section # End stock syntax example rcfile # Generic runcommands for example daemon. Using # # custom symbols and unconventional identifiers. # !confvars sftpd_enable="yes" sftpd_anonymous="yes" sftpd_flags="" !prependwith timeStamp # Function from rc.func library !run -p 200 -u root /usr/local/sbin/sftpd -c !term -p 200 -u root kill -TERM `cat /var/sftp/run/sftpd.pid` !hangup -u root kill -HUP `cat /var/sftp/run/sftpd.pid` !termrun -u root &term # Reference to term section sleep 2 &start # Reference to start section !printstat -c /usr/bin/perl print STDERR "Sftpd status report"; for ... !problem # We have a rc (not user-level) error # Very rough representation of built-in rc language +syslogit DAEMON CRITICAL; +if ${sftpd_error} +outconsole ${sftpd_error}; +outconsole "Runcommand-level error in line "; +lineno SCRIPT; # Not +lineno ABSOLUTE; +outconsole " of rcfile "; +rcfilename; !missing # Gets hit if no other section label matches $HOME/bin/popup "Missing section in rc.sftpd!" # Run custom app @error # Reference to error section # End custom syntax example rcfile # Generic runcommands for example daemon. Using an # # XML-like syntax and conventional identifiers. # "yes" "yes" "" timeStamp # Function from rc.func library /usr/local/sbin/sftpd -c kill -TERM `cat /var/sftp/run/sftpd.pid` kill -HUP `cat /var/sftp/run/sftpd.pid` # Reference to term section sleep 2 # Reference to start section print STDERR "Sftpd status report"; for ... # We have a rc (not user-level) error # Very rough representation of built-in rc language +syslogit DAEMON CRITICAL; +if ${sftpd_error} +outconsole ${sftpd_error}; +outconsole "Runcommand-level error in line "; +lineno SCRIPT; # Not +lineno ABSOLUTE; +outconsole " of rcfile "; +rcfilename; # Gets hit if no other section label matches $HOME/bin/popup "Missing section in rc.sftpd!" # Run custom app # Reference to error section # End XML-like syntax example rcfile # Generic runcommands for example daemon. Using a # # ASN.1-like syntax and conventional identifiers. # config CONFIG BEGIN sftpd_enable STRING ::= "yes" sftpd_anonymous STRING ::= "yes" sftpd_flags STRING ::= "" END common COMMON BEGIN timeStamp # Function from rc.func library END start SECTION ::= { priority INTEGER ::= 200 user STRING ::= "root" } BEGIN /usr/local/sbin/sftpd -c END stop SECTION ::= { priority INTEGER ::= 200 user STRING ::= "root" } BEGIN kill -TERM `cat /var/sftp/run/sftpd.pid` END reload SECTION ::= { user STRING ::= "root" } BEGIN kill -HUP `cat /var/sftp/run/sftpd.pid` END restart SECTION ::= { user STRING ::= "root" } BEGIN stop REFER # Reference to term section sleep 2 start REFER # Reference to start section END status SECTION ::= { priority INTEGER ::= 100 interpreter STRING ::= "/usr/bin/perl" } BEGIN print STDERR "Sftpd status report"; for ... END error ERROR # We have a rc (not user-level) error # Very rough representation of built-in rc language BEGIN +syslogit DAEMON CRITICAL; +if ${sftpd_error} +outconsole ${sftpd_error}; +outconsole "Runcommand-level error in line "; +lineno SCRIPT; # Not +lineno ABSOLUTE; +outconsole " of rcfile "; +rcfilename; END default DEFAULT # Gets hit if no other section label matches BEGIN $HOME/bin/popup "Missing section in rc.sftpd!" # Run custom app error REFER # Reference to error section END # End ASN.1-like syntax example rcfile