Index: ossp-pkg/rc/rc.h RCS File: /v/ossp/cvs/ossp-pkg/rc/rc.h,v rcsdiff -q -kk '-r1.38' '-r1.39' -u '/v/ossp/cvs/ossp-pkg/rc/rc.h,v' 2>/dev/null --- rc.h 2002/08/02 16:38:09 1.38 +++ rc.h 2003/04/03 12:05:14 1.39 @@ -111,7 +111,7 @@ /* Script function prototypes */ rc_script_t *scriptNew(void); -rc_return_t scriptAppend(rc_script_t *, char *, size_t); +rc_return_t scriptAppend(rc_script_t *, const char *, size_t); rc_section_t *scriptSection(rc_script_t *, const char *); rc_return_t scriptDump(rc_script_t *); const char *scriptTostring(rc_script_t *); @@ -122,6 +122,7 @@ const int sectionGetpri(rc_section_t *); const int sectionGetuid(rc_section_t *); const char *sectionGetdata(rc_section_t *); +size_t sectionGetlen(rc_section_t *); rc_return_t sectionSetpri(rc_section_t *, int); rc_return_t sectionSetuid(rc_section_t *, int); rc_return_t sectionSetdata(rc_section_t *, const char *); Index: ossp-pkg/rc/rc_private.h RCS File: /v/ossp/cvs/ossp-pkg/rc/rc_private.h,v rcsdiff -q -kk '-r1.20' '-r1.21' -u '/v/ossp/cvs/ossp-pkg/rc/rc_private.h,v' 2>/dev/null --- rc_private.h 2002/08/02 16:38:09 1.20 +++ rc_private.h 2003/04/03 12:05:14 1.21 @@ -90,6 +90,7 @@ int nPri; int nUid; char *szData; + size_t Bytes; } rc_section_t; /* Processor class */ Index: ossp-pkg/rc/rc_proc.c RCS File: /v/ossp/cvs/ossp-pkg/rc/rc_proc.c,v rcsdiff -q -kk '-r1.17' '-r1.18' -u '/v/ossp/cvs/ossp-pkg/rc/rc_proc.c,v' 2>/dev/null --- rc_proc.c 2002/08/02 20:09:59 1.17 +++ rc_proc.c 2003/04/03 12:05:14 1.18 @@ -152,25 +152,20 @@ /* FIXME: Swap nested rcfile/section logic loops for section/rcfile ordering */ for (i = 0; pRc->m_pAnal->m_pszSecs[i]; i++) { /* Iterate over */ /* Extract a section from the temp script, and append it */ - szSec = scriptSection(pTempscript, pRc->m_pAnal->m_pszSecs[i]); + pSec = scriptSection(pTempscript, pRc->m_pAnal->m_pszSecs[i]); - if (szSec) { /* Only call if the section lookup succeeds */ - scriptAppend(ppParts[nIter], szSec, strlen(szSec)); + if (pSec) { /* Only call if the section lookup succeeds */ + scriptAppend(ppParts[nIter], sectionGetdata(pSec), + sectionGetlen(pSec) - 1); scriptAppend(pRc->m_pScript, "\n", sizeof(char)); } -/* if (szSec) { -* Only call if the section lookup succeeds *- - scriptAppend(pRc->m_pScript, szSec, strlen(szSec)); - scriptAppend(pRc->m_pScript, "\n", sizeof(char)); - } - else if (configGetval(RC_DBG_VAL)) -* Only show if debug set *- + else if (configGetval(RC_DBG_VAL)) /* Only show if debug set */ fprintf(stderr, "#Warning: Missing section '%s' in %s!\n",\ pRc->m_pAnal->m_pszSecs[i],\ - pRc->m_pAnal->m_szRcs[nIter]);*/ + pRc->m_pAnal->m_szRcs[nIter]); - if (szSec) { /* Cleanup iterative section string */ - free(szSec); - szSec = NULL; - } + if (pSec) /* Cleanup iterative section string */ + sectionDelete(pSec); } } catch(Except) @@ -192,6 +187,7 @@ if (ppParts[nRept]) { free(ppParts[nRept]); ppParts[nRept] = NULL; + } } free(ppParts); ppParts = NULL; Index: ossp-pkg/rc/rc_script.c RCS File: /v/ossp/cvs/ossp-pkg/rc/rc_script.c,v rcsdiff -q -kk '-r1.11' '-r1.12' -u '/v/ossp/cvs/ossp-pkg/rc/rc_script.c,v' 2>/dev/null --- rc_script.c 2002/08/02 20:09:59 1.11 +++ rc_script.c 2003/04/03 12:05:14 1.12 @@ -50,11 +50,11 @@ return(pScript); } -/************************************************ -* scriptAppend(rc_script_t *, char *, size_t) * -* Append text to a script * -************************************************/ -rc_return_t scriptAppend(rc_script_t *pScript, char *szInbuf, size_t Size) +/**************************************************** +* scriptAppend(rc_script_t *, const char *, size_t) * +* Append text to a script * +****************************************************/ +rc_return_t scriptAppend(rc_script_t *pScript, const char *szInbuf, size_t Size) { int nResize = 0; void *pvRealloc = NULL; @@ -171,6 +171,8 @@ piLabstart = piBlocend + *(pnVec + 2); nLabsize = *(pnVec + 3) - *(pnVec + 2); +fprintf(stderr, "Substring we want ist %s!\n", kszSecname); +fprintf(stderr, "Compared with ist %s!\n", piLabstart); /* Test the substring. If it matches our label, make a new section */ if (!strncmp(piLabstart, kszSecname, nLabsize)) { /* Handle the section body */ Index: ossp-pkg/rc/rc_sect.c RCS File: /v/ossp/cvs/ossp-pkg/rc/rc_sect.c,v rcsdiff -q -kk '-r1.1' '-r1.2' -u '/v/ossp/cvs/ossp-pkg/rc/rc_sect.c,v' 2>/dev/null --- rc_sect.c 2002/08/02 16:38:09 1.1 +++ rc_sect.c 2003/04/03 12:05:14 1.2 @@ -28,6 +28,7 @@ */ #include /* For string copy and such data ops */ +#include /* For memory ops */ #include "rc.h" /* Public Rc interface */ @@ -42,8 +43,10 @@ /* Among other things, they make great coffee at Cable & Wireless */ /* This code would probably have more bugs if the coffee was not as good */ - pSec = (rc_section_t *)malloc(sizeof(rc_section_t)); - *pSec = NULL; + pSec = (rc_section_t *)calloc(1, sizeof(rc_section_t)); + + if (!pSec) + RC_THROW(RC_ERR_MEM); return(pSec); } @@ -82,6 +85,16 @@ return(0); /* Not reached */ } +size_t sectionGetlen(rc_section_t *pSec) +{ /* Data length of section, length of a script body of a particular section */ + if (pSec) + return(pSec->Bytes); + else + RC_THROW(RC_ERR_USE); + + return(0); /* Not reached */ +} + /************************************************ * sectionSetXXX(rc_section_t *) * * Accessor methods * @@ -109,13 +122,14 @@ rc_return_t sectionSetdata(rc_section_t *pSec, const char *kszScript) { /* Data of section, this is the script body of the particular section */ if (pSec) { + pSec->Bytes = strlen(kszScript) + sizeof(char); /* Calculate size */ if (pSec->szData) { /* The section data is already in use */ free(pSec->szData); - pSec->szData = malloc(strlen(kszScript) + sizeof(char)); + pSec->szData = malloc(pSec->szData); strcpy(pSec->szData, kszScript); } else { /* Set the data the usual way */ - pSec->szData = malloc(strlen(kszScript) + sizeof(char)); + pSec->szData = malloc(pSec->szData); strcpy(pSec->szData, kszScript); } return(RC_THROW(RC_OK)); Index: ossp-pkg/rc/rc_test.sh RCS File: /v/ossp/cvs/ossp-pkg/rc/rc_test.sh,v rcsdiff -q -kk '-r1.21' '-r1.22' -u '/v/ossp/cvs/ossp-pkg/rc/rc_test.sh,v' 2>/dev/null --- rc_test.sh 2002/08/01 13:25:32 1.21 +++ rc_test.sh 2003/04/03 12:05:14 1.22 @@ -42,18 +42,24 @@ #./rc -derv -L ./rc_test/rc.d/rc.%{RCFILE:s/^all$/*/} -c ./rc.conf -f ./rc_test/rcfuncs -t /tmp openssh stop sleep=4 start daily minsize=2097152 # Test some long options, should fail for false combination usage +#clear echo; echo "./rc --verbose --silent --print --NameConfig config --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" uucp stop sleep=6 start" ./rc --verbose --silent --print --NameConfig config --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" uucp stop sleep=6 start +#read dummy;clear echo; echo "./rc --query myvar --silent --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" zebra bing bang" ./rc --query myvar --silent --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" zebra bing bang +#read dummy;clear echo; echo "./rc --conf ./rc.conf --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" --locate ./rc_test/ --query this barf test" ./rc --conf ./rc.conf --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" --locate ./rc_test/ --query this barf test +#read dummy;clear # Test minimal set of long options, should succeed echo; echo "./rc --debug --version --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" rsyncd nothing matters but the version" ./rc --debug --version --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" rsyncd nothing matters but the version +#read dummy;clear echo; echo "./rc --conf $RCBASE/rc.conf --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query all barf test" ./rc --conf $RCBASE/rc.conf --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --locate $RCBASE/rc.d:./rc_test:/etc/rc --query all barf test +#read dummy;clear # FIXME these cases are not handled yet by our configuration FIXME # #echo; echo "./rc --debug --version" @@ -70,52 +76,69 @@ echo; echo "./rc --func rc_test/rcfuncs --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --verbose openssh stop sleep=4 start" ./rc --func rc_test/rcfuncs --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --verbose openssh stop sleep=4 start +#read dummy;clear echo; echo "./rc --func ./rc_test/rcfuncs --info --eval uucp restart" ./rc --func ./rc_test/rcfuncs --info --eval uucp restart +#read dummy;clear echo; echo "./rc --conf rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" uucp start" ./rc --conf rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" uucp start +#read dummy;clear echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" ntp sync" ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" ntp sync +#read dummy;clear echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --silent --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" ralf feed suppe" ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs --tmp /tmp --debug --silent --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" ralf feed suppe +#read dummy;clear echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L rc_test --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent samba search finish destroy" ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L rc_test --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent samba search finish destroy +#read dummy;clear echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent all feed suppe" ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent all feed suppe +#read dummy;clear echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent --debug all config barf gag" ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent --debug all config barf gag +#read dummy;clear echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent --debug --eval all config start" ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent --debug --eval all config start +#read dummy;clear #echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent --debug --exec all config start" #./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent --debug --exec all config start echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --print --debug pam info" ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --print --debug pam info +#read dummy;clear echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef \"%(.+)\" --tmp /tmp --silent --debug apache config start" ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L $RCBASE/rc.d --ParseSectionDef "%(.+)" --tmp /tmp --silent --debug apache config start +#read dummy;clear echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" --tmp /tmp --silent --debug all config start" ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" --tmp /tmp --silent --debug all config start +#read dummy;clear echo; echo "./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" --tmp /tmp --silent --debug pam info" ./rc --conf ./rc_test/myrc.conf --func ./rc_test/rcfuncs -L ./rc_test/ --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" --tmp /tmp --silent --debug pam info +#read dummy;clear echo; echo "./rc --conf ./rc_test/myrc.conf --func $RCBASE/rc.func -L $RCBASE/rc.d/ --ParseSectionDef \"^%(\w+)[ \t]*(.*?)\n(.*?)^$\" --tmp /tmp --silent --debug dhcpd start" ./rc --conf ./rc_test/myrc.conf --func $RCBASE/rc.func -L $RCBASE/rc.d/ --ParseSectionDef "^%(\w+)[ \t]*(.*?)\n(.*?)^$" --tmp /tmp --silent --debug dhcpd start +#read dummy;clear echo; echo "./rc --func ./rc_test/rcfuncs --exec --ParseSectionDef \"^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>\" -L ./rc_test pam autre" ./rc --func ./rc_test/rcfuncs --exec --ParseSectionDef "^<(.+?)[ \t]*(.*?)>\n*(.*?)^<\/\1>" -L ./rc_test pam autre +#read dummy;clear echo; echo "./rc --func ./rc_test/rcfuncs -L ./rc_test/ dhcpd stop" ./rc --func ./rc_test/rcfuncs -L ./rc_test/ dhcpd stop +#read dummy;clear echo; echo "./rc --exec --func ./rc_test/rcfuncs -L ./rc_test/ dhcpd gotest" ./rc --exec --func ./rc_test/rcfuncs -L ./rc_test/ dhcpd gotest +#read dummy;clear # Next milestone #RequireOwner Index: ossp-pkg/rc/rc_test/rc.dhcpd RCS File: /v/ossp/cvs/ossp-pkg/rc/rc_test/rc.dhcpd,v rcsdiff -q -kk '-r1.2' '-r1.3' -u '/v/ossp/cvs/ossp-pkg/rc/rc_test/rc.dhcpd,v' 2>/dev/null --- rc.dhcpd 2002/08/01 14:31:39 1.2 +++ rc.dhcpd 2003/04/03 12:05:16 1.3 @@ -11,6 +11,7 @@ /sw/sbin/dhcpd %gotest + echo "Doing gotest section in file rc.dhcpd" ping -a -c 4 dt1.dev.de.cw.net curl -s ftp://ftp.openpkg.org/current/SRC/ | grep openssl date