5 Commits
1.9.2 ... 1.9.3

Author SHA1 Message Date
T. von Dein
3d0ec6bfbc fix release building (#4) 2025-11-23 18:23:49 +01:00
b836a4e75d add dist to clean 2025-11-23 18:01:14 +01:00
a4a3cd470f fix db uri 2025-11-21 22:30:17 +01:00
T. von Dein
f2137627d7 unitfixes (#3)
- fix regex match padding
- fix key copying
- add more unit tests
2025-11-21 22:10:52 +01:00
bb967c68c6 upd version 2025-11-21 14:09:38 +01:00
11 changed files with 84 additions and 32 deletions

View File

@@ -44,9 +44,17 @@ steps:
# check modified key # check modified key
- build/dbtool -d test.db -s -k test | grep modified - build/dbtool -d test.db -s -k test | grep modified
# use splitting with regex # 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 # 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: build-gdbm:
@@ -90,7 +98,14 @@ steps:
# check modified key # check modified key
- build/dbtool -d test.db -s -k test | grep modified - build/dbtool -d test.db -s -k test | grep modified
# use splitting with regex # 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 # 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

View File

@@ -50,5 +50,5 @@ fi
for file in "$@"; do for file in "$@"; do
https --ignore-stdin --check-status -A bearer -a "$DEPLOY_TOKEN" -f POST \ https --ignore-stdin --check-status -A bearer -a "$DEPLOY_TOKEN" -f POST \
"https://codeberg.org/api/v1/repos/${CI_REPO_OWNER}/${CI_REPO_NAME}/releases/$ID/assets" \ "https://codeberg.org/api/v1/repos/${CI_REPO_OWNER}/${CI_REPO_NAME}/releases/$ID/assets" \
"name=${file}-${version}" "attachment@${file}" "name=${file}" "attachment@${file}"
done done

View File

@@ -6,24 +6,26 @@ labels:
steps: steps:
compile: compile:
when: when:
event: [tag] event: [tag,manual]
image: alpine:latest image: alpine:latest
commands: commands:
- apk update - apk update
- apk add --no-cache bash build-base words-en gdb perl pcre2-static pcre2-dev gdbm gdbm-dev pkgconfig meson ninja - apk add --no-cache bash build-base words-en gdb perl pcre2-static pcre2-dev gdbm gdbm-dev pkgconfig meson ninja git
- meson setup --reconfigure --prefer-static -Dcpp_link_args="-static" --buildtype=release build - meson setup --reconfigure --prefer-static -Dcpp_link_args="-static" --buildtype=release build
- ninja -C build - ninja -C build
- meson dist -C build --formats xztar,gztar,zip
- file build/dbtool - file build/dbtool
- mv build/dbtool dbtool-linux-amd64 - mv build/dbtool dbtool-linux-amd64-$CI_COMMIT_TAG
- mv build/meson-dist/* .
release: release:
image: alpine:latest image: alpine:latest
when: when:
event: [tag] event: [tag,manual]
environment: environment:
DEPLOY_TOKEN: DEPLOY_TOKEN:
from_secret: DEPLOY_TOKEN from_secret: DEPLOY_TOKEN
commands: commands:
- apk update - apk update
- apk add --no-cache bash httpie jq git - apk add --no-cache bash httpie jq git
- .woodpecker/release.sh dbtool-linux-amd64 - .woodpecker/release.sh dbtool-*

19
.woodpecker/test.sh Executable file
View File

@@ -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

22
Makefile Normal file
View File

@@ -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 clean
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

View File

@@ -1,7 +1,7 @@
[![status-badge](https://ci.codeberg.org/api/badges/15585/status.svg)](https://ci.codeberg.org/repos/15585) [![status-badge](https://ci.codeberg.org/api/badges/15585/status.svg)](https://ci.codeberg.org/repos/15585)
[![License](https://img.shields.io/badge/license-GPL-blue.svg)](https://codeberg.org/scip/dbtool/blob/master/LICENSE) [![License](https://img.shields.io/badge/license-GPL-blue.svg)](https://codeberg.org/scip/dbtool/blob/master/LICENSE)
# README for dbtool 1.9.1 (21/11/2025) # README for dbtool 1.9.2 (21/11/2025)
dbtool can be used to store and retrieve data in a key/value dbtool can be used to store and retrieve data in a key/value
format in a hash database. Perl compatible regular expressions format in a hash database. Perl compatible regular expressions
@@ -17,7 +17,7 @@ data and speed.
You need either the GNU gdbm library or the Berkeley database You need either the GNU gdbm library or the Berkeley database
system. You can find gdbm at: system. You can find gdbm at:
http://www.gnu.org/software/gdbm/gdbm.html http://www.gnu.org/software/gdbm/gdbm.html
And the berkeley library at: http://www.sleepycat.com. And the berkeley library at: https://libdb.org/.
You will also need `meson` and `ninja`: https://mesonbuild.com/. You will also need `meson` and `ninja`: https://mesonbuild.com/.

View File

@@ -57,10 +57,7 @@ void cipher::init(const string& phrase) {
dig.putDigest( (unsigned char *)phrase.c_str(), phrase.length() ); dig.putDigest( (unsigned char *)phrase.c_str(), phrase.length() );
__key = dig.stringDigest(); // this is a 32 byte long string, as Rijndael:: expects __key = dig.stringDigest(); // this is a 32 byte long string, as Rijndael:: expects
/* convert the key to unsigned char[] */ memcpy(key, __key, 32);
for(int i=0; i<32; i++) {
key[i] = __key[i];
}
} }

View File

@@ -61,7 +61,6 @@ class cipher {
Rijndael rijn; Rijndael rijn;
MD5Digest dig; MD5Digest dig;
unsigned char key[32]; unsigned char key[32];
string blah;
const char* error(int num); const char* error(int num);
public: public:

View File

@@ -125,7 +125,6 @@ int main(int argc, char *argv[]) {
} }
string readpass() { string readpass() {
char *envpass; char *envpass;
envpass = getenv(PW_VARNAME); envpass = getenv(PW_VARNAME);
@@ -146,5 +145,3 @@ string readpass() {
return password; return password;
} }
} }

View File

@@ -334,6 +334,7 @@ void Engine::regexp() {
char *part = (char *)malloc(substring_length+1); char *part = (char *)malloc(substring_length+1);
part = strncpy(part, (char *)substring_start, substring_length); part = strncpy(part, (char *)substring_start, substring_length);
part[substring_length] = '\0';
subs[i-1] = part; subs[i-1] = part;
free(part); free(part);

View File

@@ -2,7 +2,7 @@ project(
'dbtool', 'dbtool',
'cpp', 'cpp',
license: 'GPL', license: 'GPL',
version: '1.9.2', version: '1.9.3',
meson_version: '>=1.3', meson_version: '>=1.3',
default_options: [ default_options: [
'warning_level=2', 'warning_level=2',