diff --git a/.woodpecker/build.yaml b/.woodpecker/build.yaml index 5e7c56f..c83eb67 100644 --- a/.woodpecker/build.yaml +++ b/.woodpecker/build.yaml @@ -44,9 +44,17 @@ steps: # check modified key - build/dbtool -d test.db -s -k test | grep modified # use splitting with regex - - printf "today:100\nyesterday:500\n" | build/dbtool -d test.db -i -f -t '^([^:]*):([^:]*)' + - echo today:100 | build/dbtool -d test.db -i -f -t '^([^:]*):([^:]*)' # check if it works - - cat /etc/passwd | build/dbtool -d test.db -s -k today | grep 100 + - build/dbtool -d test.db -s -k today | grep 100 + # use splitting with regex reverse + - echo today:cold | build/dbtool -d test.db -R -i -f -t '^([^:]*):([^:]*)' + # check if it works + - build/dbtool -d test.db -s -k cold | grep today + # check encryption + - build/dbtool -d test.db -i -k borg -v sevenofnine -p -P foobar + - build/dbtool -d test.db -s -k borg -p -P foobar | grep sevenofnine + build-gdbm: @@ -90,7 +98,14 @@ steps: # check modified key - build/dbtool -d test.db -s -k test | grep modified # use splitting with regex - - printf "today:100\nyesterday:500\n" | build/dbtool -d test.db -i -f -t '^([^:]*):([^:]*)' + - echo today:100 | build/dbtool -d test.db -i -f -t '^([^:]*):([^:]*)' # check if it works - - cat /etc/passwd | build/dbtool -d test.db -s -k today | grep 100 + - build/dbtool -d test.db -s -k today | grep 100 + # use splitting with regex reverse + - echo today:cold | build/dbtool -d test.db -R -i -f -t '^([^:]*):([^:]*)' + # check if it works + - build/dbtool -d test.db -s -k cold | grep today + # check encryption + - build/dbtool -d test.db -i -k borg -v sevenofnine -p -P foobar + - build/dbtool -d test.db -s -k borg -p -P foobar | grep sevenofnine diff --git a/.woodpecker/test.sh b/.woodpecker/test.sh new file mode 100755 index 0000000..d19eba1 --- /dev/null +++ b/.woodpecker/test.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +yq '.steps.test-gdbm.commands' < .woodpecker/build.yaml \ + | grep -- - | grep -v apk | sed 's/^\- //' \ + | while read COMMAND; do + echo "$COMMAND" | bash -e > debug.log 2>&1 + if test $? -ne 0; then + echo "fail - $COMMAND" + if test -s debug.log; then + cat debug.log + else + echo exit 1 + fi + else + echo "ok - $COMMAND" + fi +done + +rm -f debug.log diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..efa6fd1 --- /dev/null +++ b/Makefile @@ -0,0 +1,22 @@ +# +# convenience wrapper around meson and ninja. Forgive me, I'm old : + +.PHONY: all static install test clean debug +all: + meson setup --reconfigure build + ninja -C build + +install: all + sudo ninja -C install + +clean: + rm -rf build dbtool*core* dbtool.1 test.db + +test: + @.woodpecker/test.sh + +debug: all + rm -f test.db + build/dbtool -d test.db -i -k borg -v sevenofnine -p -P foobar + build/dbtool -d test.db -s -k borg -p -P foobar + diff --git a/cipher.cc b/cipher.cc index 815b92f..f11cc57 100644 --- a/cipher.cc +++ b/cipher.cc @@ -56,11 +56,8 @@ void cipher::init(const string& phrase) { dig.initDigest(); dig.putDigest( (unsigned char *)phrase.c_str(), phrase.length() ); __key = dig.stringDigest(); // this is a 32 byte long string, as Rijndael:: expects - - /* convert the key to unsigned char[] */ - for(int i=0; i<32; i++) { - key[i] = __key[i]; - } + + memcpy(key, __key, 32); } diff --git a/cipher.h b/cipher.h index e8da86b..b6d5675 100644 --- a/cipher.h +++ b/cipher.h @@ -61,7 +61,6 @@ class cipher { Rijndael rijn; MD5Digest dig; unsigned char key[32]; - string blah; const char* error(int num); public: diff --git a/dbtool.cc b/dbtool.cc index 75f05a4..ee500d6 100644 --- a/dbtool.cc +++ b/dbtool.cc @@ -67,8 +67,8 @@ int main(int argc, char *argv[]) { case 'i': /* insert */ if(config.key == "") { - cerr << pkg << ": key required\n"; - exit(1); + cerr << pkg << ": key required\n"; + exit(1); } engine.insert(); break; @@ -82,32 +82,32 @@ int main(int argc, char *argv[]) { case 's': /* select */ if(config.key == "") { - cerr << pkg << ": key required\n"; - exit(1); + cerr << pkg << ": key required\n"; + exit(1); } engine.select(); break; case 'S': /* regexp select */ if(config.key == "") { - cerr << pkg << ": key (regexp) required\n"; - exit(1); + cerr << pkg << ": key (regexp) required\n"; + exit(1); } engine.regexp(); break; case 'r': /* remove */ if(config.key == "") { - cerr << pkg << ": key required\n"; - exit(1); + cerr << pkg << ": key required\n"; + exit(1); } engine.remove(); break; case 'u': /* update */ if(config.key == "") { - cerr << pkg << ": key required\n"; - exit(1); + cerr << pkg << ": key required\n"; + exit(1); } engine.update(); break; @@ -125,7 +125,6 @@ int main(int argc, char *argv[]) { } - string readpass() { char *envpass; envpass = getenv(PW_VARNAME); @@ -146,5 +145,3 @@ string readpass() { return password; } } - - diff --git a/engine.cc b/engine.cc index 74b65a3..40845de 100644 --- a/engine.cc +++ b/engine.cc @@ -334,6 +334,7 @@ void Engine::regexp() { char *part = (char *)malloc(substring_length+1); part = strncpy(part, (char *)substring_start, substring_length); + part[substring_length] = '\0'; subs[i-1] = part; free(part); diff --git a/meson.build b/meson.build index 80a3872..fbb9d5f 100644 --- a/meson.build +++ b/meson.build @@ -2,7 +2,7 @@ project( 'dbtool', 'cpp', license: 'GPL', - version: '1.9.2', + version: '1.9.3', meson_version: '>=1.3', default_options: [ 'warning_level=2',