SF.net SVN: nagiosplug: [1946] nagiosplug/trunk/lib

[email protected]
Newsgroups gmane.network.nagios.plugins.cvs
Message-ID <[email protected]>
Revision: 1946
          http://nagiosplug.svn.sourceforge.net/nagiosplug/?rev=1946&view=rev
Author:   dermoth
Date:     2008-03-15 09:17:49 -0700 (Sat, 15 Mar 2008)

Log Message:
-----------
Fix segfault in test_ini.c and uncomment the affected tests
Fix bug in stanza parsing where full section could be skipped
Fix single-argument options

Modified Paths:
--------------
    nagiosplug/trunk/lib/parse_ini.c
    nagiosplug/trunk/lib/tests/test_ini.c

Modified: nagiosplug/trunk/lib/parse_ini.c
===================================================================
--- nagiosplug/trunk/lib/parse_ini.c	2008-03-15 04:51:45 UTC (rev 1945)
+++ nagiosplug/trunk/lib/parse_ini.c	2008-03-15 16:17:49 UTC (rev 1946)
@@ -85,14 +85,14 @@
 	/* if a file was specified or if we're using the default file */
 	if(i.file != NULL && strlen(i.file) > 0){
 		if(strcmp(i.file, "-")==0){
-			inifile=stdout;
+			inifile=stdout; /* FIXME: Shouldn't it be 'stdin' ??? */
 		} else {
 			inifile=fopen(i.file, "r");
 		}
 		if(inifile==NULL) die(STATE_UNKNOWN, _("Config file error"));
 		defaults=read_defaults(inifile, i.stanza);
 		free(i.file);
-		if(inifile!=stdout) fclose(inifile);
+		if(inifile!=stdout) fclose(inifile); /* FIXME: Shouldn't it be 'stdin' ??? */
 	}
 	free(i.stanza);
 	return defaults;	
@@ -126,9 +126,9 @@
 				stanzastate=WRONGSTANZA;
 				for(i=0; i<stanza_len; i++){
 					c=fgetc(f);
-					/* nope, read to the end of the stanza header */
+					/* nope, read to the end of the line */
 					if(c!=stanza[i]) {
-						GOBBLE_TO(f, c, ']');
+						GOBBLE_TO(f, c, '\n');
 						break;
 					}
 				}
@@ -215,14 +215,18 @@
 	for(valptr=eqptr+1; valptr<lineend && isspace(*valptr); valptr++);
 	/* continue to the end of value (FIXME: watching for trailing comments) */
 	for(valend=valptr; valend<lineend; valend++)
-		/* FIXME: N::P doesn't allow comments. Remove next line and parse_ini won't either */
+		/* FIXME: N::P doesn't allow comments here. Remove next line and parse_ini won't either */
 		if(*valend=='#') break;
 	--valend;
 	/* Finally trim off trailing spaces */
 	for(valend; isspace(*valend); valend--);
 	/* calculate the length of "--foo" */
 	opt_len=1+optend-optptr;
-	cfg_len=2+(opt_len);
+	/* 1-character params needs only one dash */
+	if (opt_len==1)
+		cfg_len=1+(opt_len);
+	else
+		cfg_len=2+(opt_len);
 	/* if valptr<lineend then we have to also allocate space for "=bar" */
 	if(valptr<lineend) {
 		equals=value=1;
@@ -243,7 +247,14 @@
 
 	read_pos=0;
 	optnew->arg=(char *)malloc(cfg_len+1);
-	strncpy(&optnew->arg[read_pos], "--", 2); read_pos+=2;
+	/* 1-character params needs only one dash */
+	if (opt_len==1) {
+		strncpy(&optnew->arg[read_pos], "-", 1);
+		read_pos+=1;
+	} else {
+		strncpy(&optnew->arg[read_pos], "--", 2);
+		read_pos+=2;
+	}
 	strncpy(&optnew->arg[read_pos], optptr, opt_len); read_pos+=opt_len;
 	if(equals) optnew->arg[read_pos++]='=';
 	if(value) {

Modified: nagiosplug/trunk/lib/tests/test_ini.c
===================================================================
--- nagiosplug/trunk/lib/tests/test_ini.c	2008-03-15 04:51:45 UTC (rev 1945)
+++ nagiosplug/trunk/lib/tests/test_ini.c	2008-03-15 16:17:49 UTC (rev 1946)
@@ -36,12 +36,13 @@
 	char *optstr=NULL;
 
 	/* Put everything as a space-separated string */
+	asprintf(&optstr, "");
 	while (optlst) {
-		asprintf(&optstr, "%s%s ", optstr?optstr:"", optlst->arg);
+		asprintf(&optstr, "%s%s ", optstr, optlst->arg);
 		optlst=optlst->next;
 	}
 	/* Strip last whitespace */
-	optstr[strlen(optstr)-1]='\0';
+	if (strlen(optstr)>1) optstr[strlen(optstr)-1]='\0';
 
 	return optstr;
 }
@@ -51,7 +52,7 @@
 {
 	char *optstr=NULL;
 
-	plan_tests(4);
+	plan_tests(9);
 
 	optstr=list2str(np_get_defaults("section@./config-tiny.ini", "check_disk"));
 	ok( !strcmp(optstr, "--one=two --Foo=Bar --this=Your Mother! --blank="), "config-tiny.ini's section as expected");
@@ -61,42 +62,33 @@
 	ok( !strcmp(optstr, "--one=two --Foo=Bar --this=Your Mother! --blank="), "Used default section name, without specific");
 	my_free(optstr);
 
-	/* This test currently crashes */
-	/*
-	optstr=np_get_defaults("section_unknown@./config-tiny.ini", "section");
+	optstr=list2str(np_get_defaults("section_unknown@./config-tiny.ini", "section"));
 	ok( !strcmp(optstr, "--one=two --Foo=Bar --this=Your Mother! --blank="), "Used default section name over specified one");
 	my_free(optstr);
-	*/
 
 	optstr=list2str(np_get_defaults("Section Two@./config-tiny.ini", "check_disk"));
 	ok( !strcmp(optstr, "--something else=blah --remove=whitespace"), "config-tiny.ini's Section Two as expected");
 	my_free(optstr);
 
-	/* These tests currently crash parse_ini.c */
-	/*
-	optstr=np_get_defaults("/path/to/file.txt@./config-tiny.ini", "check_disk");
+	optstr=list2str(np_get_defaults("/path/to/file.txt@./config-tiny.ini", "check_disk"));
 	ok( !strcmp(optstr, "--this=that"), "config-tiny.ini's filename as section name");
 	my_free(optstr);
 
-	optstr=np_get_defaults("section2@./config-tiny.ini", "check_disk");
+	optstr=list2str(np_get_defaults("section2@./config-tiny.ini", "check_disk"));
 	ok( !strcmp(optstr, "--this=that"), "config-tiny.ini's section2 with whitespace before section name");
 	my_free(optstr);
 
-	optstr=np_get_defaults("section3@./config-tiny.ini", "check_disk");
+	optstr=list2str(np_get_defaults("section3@./config-tiny.ini", "check_disk"));
 	ok( !strcmp(optstr, "--this=that"), "config-tiny.ini's section3 with whitespace after section name");
 	my_free(optstr);
-	*/
 
 	optstr=list2str(np_get_defaults("check_mysql@./plugin.ini", "check_disk"));
 	ok( !strcmp(optstr, "--username=operator --password=secret"), "plugin.ini's check_mysql as expected");
 	my_free(optstr);
 
-	/* This test crashes at the moment. I think it is not expecting single character parameter names */
-	/*
-	optstr=np_get_defaults("check_mysql2@./config-tiny.ini", "check_disk");
+	optstr=list2str(np_get_defaults("check_mysql2@./plugin.ini", "check_disk"));
 	ok( !strcmp(optstr, "-u=admin -p=secret"), "plugin.ini's check_mysql2 as expected");
 	my_free(optstr);
-	*/
 
 	return exit_status();
 }


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.