diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/Makefile.am | 19 | ||||
| -rw-r--r-- | lib/Makefile.in | 16 | ||||
| -rw-r--r-- | lib/parseini.in | 130 | ||||
| -rw-r--r-- | lib/tools.in | 35 | 
4 files changed, 188 insertions, 12 deletions
| diff --git a/lib/Makefile.am b/lib/Makefile.am index 2fcce96..08c26c7 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -1,15 +1,22 @@ -EXTRALIBS = easydialog tools -CLEANFILES = $(EXTRALIBS) -dist_pkglib_DATA = $(EXTRALIBS) -EXTRA_DIST = easydialog.in tools.in +EXTRA_DIST = easydialog.in parseini.in tools.in + +GENERATED_FILES = easydialog parseini tools + +dist_pkglib_DATA = $(GENERATED_FILES) + +CLEANFILES = $(GENERATED_FILES)  edit = sed \      -e "s,@BASH\@,$(BASH),g" -easydialog: easydialog.in +easydialog: #easydialog.in  	rm -f easydialog  	$(edit) easydialog.in > easydialog -tools: tools.in +parseini: #parseini.in +	rm -f parseini +	$(edit) parseini.in > parseini + +tools: #tools.in  	rm -f tools  	$(edit) tools.in > tools diff --git a/lib/Makefile.in b/lib/Makefile.in index 8ce67a9..3da86b9 100644 --- a/lib/Makefile.in +++ b/lib/Makefile.in @@ -111,10 +111,10 @@ sbindir = @sbindir@  sharedstatedir = @sharedstatedir@  sysconfdir = @sysconfdir@  target_alias = @target_alias@ -EXTRALIBS = easydialog tools -CLEANFILES = $(EXTRALIBS) -dist_pkglib_DATA = $(EXTRALIBS) -EXTRA_DIST = easydialog.in tools.in +EXTRA_DIST = easydialog.in parseini.in tools.in +GENERATED_FILES = easydialog parseini tools +dist_pkglib_DATA = $(GENERATED_FILES) +CLEANFILES = $(GENERATED_FILES)  edit = sed \      -e "s,@BASH\@,$(BASH),g" @@ -291,11 +291,15 @@ uninstall-am: uninstall-dist_pkglibDATA uninstall-info-am  	uninstall-dist_pkglibDATA uninstall-info-am -easydialog: easydialog.in +easydialog: #easydialog.in  	rm -f easydialog  	$(edit) easydialog.in > easydialog -tools: tools.in +parseini: #parseini.in +	rm -f parseini +	$(edit) parseini.in > parseini + +tools: #tools.in  	rm -f tools  	$(edit) tools.in > tools  # Tell versions [3.59,3.63) of GNU make to not export all variables. diff --git a/lib/parseini.in b/lib/parseini.in new file mode 100644 index 0000000..6f56d42 --- /dev/null +++ b/lib/parseini.in @@ -0,0 +1,130 @@ +#  +# parseini --- parses 'ini' style configuration files. +# +# Usage: +#   awk -f parseini S=<section> P=<param> <ini file> +# +# if section is an empty string, then we use the default section +# +# example ini file: +#  +#		fruit = apple +#		fruit = pear +#		multiline = this is a multiline \ +#       parameter +# +#       # this is a comment +# +#		[colors]   +#		red = yes +#		green = no +#		blue = maybe +#		 +#		[ocean]  +#		fish = red  +#		fish = blue +#        +# example usage: +#       > awk -f parseini S=ocean P=fish testfile.ini  +# would return:  +#       red +#       blue +# +    +BEGIN {  +    readlines = 1  +    implied = 1  +}  + +# remove lines starting with #, but not #! +/^#[^!]/ {next}  + +# skip blank +/^[ \r\t]*$/ {next}  + +# we want to read the lines of the matched section +# and disable for other sections +/^\[.+\][ \r\t]*$/ {  +    continueline = 0  +    if (S && implied) {  +        nline = 0  +        implied = 0  +    }  +    if (S && match($0, "^\\[" S "\\][ \n]*")) {  +        # we found the section, so start reading. +        readlines = 1  +    }  +    else {  +        # no section, so stop reading lines +        if (readlines) readlines = 0  +    }  +    next  +}  + +# when reading, store lines. + +{  +    if (!readlines) next  +    line[nline++] = $0  +    if ($0 ~ /\\[ \r\t]*$/)  +        continueline = 1  +    else  +        continueline = 0  +}  + +# process the read lines lines, matching parameters + +END {  +    # if section is set but implied is still true +    # then we never found the section, so use everything +    if (S && implied) {  +        nline = 0  +    }  + +    # if have P then find P in read lines and get values  +    if (P) {  +        MATCH = "^[ \r\t]*" P "[ \r\t]*="  +        continueline = 0  +        for (x = 0; x < nline; ++x) {  +            v = line[x]  +            if (continueline) {  +                sub(/[ \r\t]+$/, "", v)  +                if (v ~ /\\$/) {  +                   v = substr(v, 1, length(v)-1)  +                   sub(/[ \r\t]+$/, "", v)  +                }  +                if (v) value[nvalue++] = v  +            }  +            else if (v ~ MATCH) {  +                sub(MATCH, "", v)  +                sub(/^[ \r\t]+/, "", v)  +                sub(/[ \r\t]+$/, "", v)  +                if (v ~ /\\$/) {  +                    continueline = 1  +                    v = substr(v, 1, length(v)-1)  +                    sub(/[ \r\t]+$/, "", v)  +                }  +                if (v) value[nvalue++] = v  +            }  +        }  +        # copy parameter definition to output array  +        nline = nvalue  +        for (x = 0; x < nvalue; ++x)  +            line[x] = value[x]  +    }  + +    # trim all leading & trailing whitespace;  +    # except for leading whitespace in continuation lines,  +  +    for (x = 0; x < nline; ++x) {  +        sub(/^[ \r\t]+/, "", line[x])  +        sub(/[ \r\t]+$/, "", line[x])  +     }  +  +    # output the final result +    for (x = 0; x < nline; ++x)  +        print line[x]  + +    if (nline) exit 0  +    else exit 1  +} diff --git a/lib/tools.in b/lib/tools.in index 89f2ff7..90df264 100644 --- a/lib/tools.in +++ b/lib/tools.in @@ -1,5 +1,9 @@  #!@BASH@ +# This file contains functions shared between ninjahelper and backupninja. + +##################################################### +## MISC FUNCTIONS  #  # create a temporary file in a secure way. @@ -16,4 +20,35 @@ function maketemp() {  	echo $tempfile  } +##################################################### +## CONFIG-FILE RELATED FUNCTIONS + +function setfile() { +	CURRENT_CONF_FILE=$1 +} + +function setsection() { +	CURRENT_SECTION=$1 +} + +# +# sets a global var with name equal to $1 +# to the value of the configuration parameter $1 +# $2 is the default. +#  +function getconf() { +	CURRENT_PARAM=$1 +	ret=`awk -f $libdirectory/parseini S=$CURRENT_SECTION P=$CURRENT_PARAM $CURRENT_CONF_FILE` +	# if nothing is returned, set the default +	if [ "$ret" == "" -a "$2" != "" ]; then +		ret="$2" +	fi +	# replace * with %, so that it is not globbed. +	ret="${ret//\\*/__star__}" + +	# this is weird, but single quotes are needed to  +	# allow for returned values with spaces. $ret is still expanded +	# because it is in an 'eval' statement. +	eval $1='$ret' +} | 
