iUse a state file to store repository settings - dedup - deduplicating backup program Err bitreich.org 70
hgit clone git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ URL:git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ bitreich.org 70
1Log /scm/dedup/log.gph bitreich.org 70
1Files /scm/dedup/files.gph bitreich.org 70
1Refs /scm/dedup/refs.gph bitreich.org 70
1Tags /scm/dedup/tag bitreich.org 70
1README /scm/dedup/file/README.gph bitreich.org 70
1LICENSE /scm/dedup/file/LICENSE.gph bitreich.org 70
i--- Err bitreich.org 70
1commit 6b21cc335d619eb1bdf2ea285087e98e4c78d7e4 /scm/dedup/commit/6b21cc335d619eb1bdf2ea285087e98e4c78d7e4.gph bitreich.org 70
1parent 8ef5e9d6666a818d610e1e1b1ffefa552f2c76f6 /scm/dedup/commit/8ef5e9d6666a818d610e1e1b1ffefa552f2c76f6.gph bitreich.org 70
hAuthor: sin <sin@2f30.org> URL:mailto:sin@2f30.org bitreich.org 70
iDate: Sun, 12 May 2019 10:03:14 +0100 Err bitreich.org 70
i Err bitreich.org 70
iUse a state file to store repository settings Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M bcompress.c | 32 +++++++++++++++++-------------- Err bitreich.org 70
i M bencrypt.c | 37 ++++++++++++++++--------------- Err bitreich.org 70
i M block.c | 25 +++++-------------------- Err bitreich.org 70
i M block.h | 15 ++++----------- Err bitreich.org 70
i M bstorage.c | 80 ++----------------------------- Err bitreich.org 70
i M dup-check.c | 61 ++++++++++++++++++++++--------- Err bitreich.org 70
i M dup-gc.c | 61 ++++++++++++++++++++++--------- Err bitreich.org 70
i M dup-init.c | 66 +++++++++++++++++++++----------- Err bitreich.org 70
i M dup-keygen.c | 2 ++ Err bitreich.org 70
i M dup-pack.c | 60 ++++++++++++++++++++++--------- Err bitreich.org 70
i M dup-rm.c | 60 ++++++++++++++++++++++--------- Err bitreich.org 70
i M dup-unpack.c | 60 ++++++++++++++++++++++--------- Err bitreich.org 70
i M state.c | 1 + Err bitreich.org 70
i M state.h | 5 +++++ Err bitreich.org 70
i Err bitreich.org 70
i14 files changed, 317 insertions(+), 248 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/bcompress.c b/bcompress.c /scm/dedup/file/bcompress.c.gph bitreich.org 70
i@@ -16,17 +16,21 @@ Err bitreich.org 70
i #include <snappy-c.h> Err bitreich.org 70
i Err bitreich.org 70
i #include "block.h" Err bitreich.org 70
i+#include "config.h" Err bitreich.org 70
i+#include "state.h" Err bitreich.org 70
i Err bitreich.org 70
i #define CDNONETYPE 0x200 Err bitreich.org 70
i #define CDSNAPPYTYPE 0x201 Err bitreich.org 70
i #define CDLZ4TYPE 0x202 Err bitreich.org 70
i #define CDSIZE (8 + 8) Err bitreich.org 70
i Err bitreich.org 70
i+extern struct param param; Err bitreich.org 70
i+ Err bitreich.org 70
i extern int pack(unsigned char *, char *, ...); Err bitreich.org 70
i extern int unpack(unsigned char *, char *, ...); Err bitreich.org 70
i Err bitreich.org 70
i-static int bccreat(struct bctx *bctx, char *path, int mode, struct bparam *bpar); Err bitreich.org 70
i-static int bcopen(struct bctx *bctx, char *path, int flags, int mode, struct bparam *bpar); Err bitreich.org 70
i+static int bccreat(struct bctx *bctx, char *path, int mode); Err bitreich.org 70
i+static int bcopen(struct bctx *bctx, char *path, int flags, int mode); Err bitreich.org 70
i static int bcput(struct bctx *bctx, void *buf, size_t n, unsigned char *md); Err bitreich.org 70
i static int bcget(struct bctx *bctx, unsigned char *md, void *buf, size_t *n); Err bitreich.org 70
i static int bcrm(struct bctx *bctx, unsigned char *md); Err bitreich.org 70
i@@ -90,19 +94,19 @@ packcd(void *buf, struct cd *cd) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static int Err bitreich.org 70
i-bccreat(struct bctx *bctx, char *path, int mode, struct bparam *bpar) Err bitreich.org 70
i+bccreat(struct bctx *bctx, char *path, int mode) Err bitreich.org 70
i { Err bitreich.org 70
i struct cctx *cctx; Err bitreich.org 70
i int type; Err bitreich.org 70
i Err bitreich.org 70
i- if (strcasecmp(bpar->calgo, "none") == 0) { Err bitreich.org 70
i+ if (strcasecmp(param.calgo, "none") == 0) { Err bitreich.org 70
i type = CDNONETYPE; Err bitreich.org 70
i- } else if (strcasecmp(bpar->calgo, "snappy") == 0) { Err bitreich.org 70
i+ } else if (strcasecmp(param.calgo, "snappy") == 0) { Err bitreich.org 70
i type = CDSNAPPYTYPE; Err bitreich.org 70
i- } else if (strcasecmp(bpar->calgo, "lz4") == 0) { Err bitreich.org 70
i+ } else if (strcasecmp(param.calgo, "lz4") == 0) { Err bitreich.org 70
i type = CDLZ4TYPE; Err bitreich.org 70
i } else { Err bitreich.org 70
i- bseterr("invalid compression type: %s", bpar->calgo); Err bitreich.org 70
i+ bseterr("invalid compression type: %s", param.calgo); Err bitreich.org 70
i return -1; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i@@ -114,7 +118,7 @@ bccreat(struct bctx *bctx, char *path, int mode, struct bparam *bpar) Err bitreich.org 70
i cctx = bctx->cctx; Err bitreich.org 70
i cctx->type = type; Err bitreich.org 70
i Err bitreich.org 70
i- if (bencryptops()->creat(bctx, path, mode, bpar) < 0) { Err bitreich.org 70
i+ if (bencryptops()->creat(bctx, path, mode) < 0) { Err bitreich.org 70
i free(cctx); Err bitreich.org 70
i return -1; Err bitreich.org 70
i } Err bitreich.org 70
i@@ -122,7 +126,7 @@ bccreat(struct bctx *bctx, char *path, int mode, struct bparam *bpar) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static int Err bitreich.org 70
i-bcopen(struct bctx *bctx, char *path, int flags, int mode, struct bparam *bpar) Err bitreich.org 70
i+bcopen(struct bctx *bctx, char *path, int flags, int mode) Err bitreich.org 70
i { Err bitreich.org 70
i struct cctx *cctx; Err bitreich.org 70
i Err bitreich.org 70
i@@ -133,21 +137,21 @@ bcopen(struct bctx *bctx, char *path, int flags, int mode, struct bparam *bpar) Err bitreich.org 70
i } Err bitreich.org 70
i cctx = bctx->cctx; Err bitreich.org 70
i Err bitreich.org 70
i- if (bencryptops()->open(bctx, path, flags, mode, bpar) < 0) { Err bitreich.org 70
i+ if (bencryptops()->open(bctx, path, flags, mode) < 0) { Err bitreich.org 70
i free(cctx); Err bitreich.org 70
i return -1; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i- if (strcasecmp(bpar->calgo, "none") == 0) { Err bitreich.org 70
i+ if (strcasecmp(param.calgo, "none") == 0) { Err bitreich.org 70
i cctx->type = CDNONETYPE; Err bitreich.org 70
i- } else if (strcasecmp(bpar->calgo, "snappy") == 0) { Err bitreich.org 70
i+ } else if (strcasecmp(param.calgo, "snappy") == 0) { Err bitreich.org 70
i cctx->type = CDSNAPPYTYPE; Err bitreich.org 70
i- } else if (strcasecmp(bpar->calgo, "lz4") == 0) { Err bitreich.org 70
i+ } else if (strcasecmp(param.calgo, "lz4") == 0) { Err bitreich.org 70
i cctx->type = CDLZ4TYPE; Err bitreich.org 70
i } else { Err bitreich.org 70
i bencryptops()->close(bctx); Err bitreich.org 70
i free(cctx); Err bitreich.org 70
i- bseterr("invalid compression type: %s", bpar->calgo); Err bitreich.org 70
i+ bseterr("invalid compression type: %s", param.calgo); Err bitreich.org 70
i return -1; Err bitreich.org 70
i } Err bitreich.org 70
i return 0; Err bitreich.org 70
1diff --git a/bencrypt.c b/bencrypt.c /scm/dedup/file/bencrypt.c.gph bitreich.org 70
i@@ -16,6 +16,9 @@ Err bitreich.org 70
i Err bitreich.org 70
i #include "block.h" Err bitreich.org 70
i #include "config.h" Err bitreich.org 70
i+#include "state.h" Err bitreich.org 70
i+ Err bitreich.org 70
i+extern struct param param; Err bitreich.org 70
i Err bitreich.org 70
i #define EDNONETYPE 0x300 Err bitreich.org 70
i #define EDCHACHATYPE 0x301 Err bitreich.org 70
i@@ -24,8 +27,8 @@ Err bitreich.org 70
i extern int pack(unsigned char *, char *, ...); Err bitreich.org 70
i extern int unpack(unsigned char *, char *, ...); Err bitreich.org 70
i Err bitreich.org 70
i-static int becreat(struct bctx *bctx, char *path, int mode, struct bparam *bpar); Err bitreich.org 70
i-static int beopen(struct bctx *bctx, char *path, int flags, int mode, struct bparam *bpar); Err bitreich.org 70
i+static int becreat(struct bctx *bctx, char *path, int mode); Err bitreich.org 70
i+static int beopen(struct bctx *bctx, char *path, int flags, int mode); Err bitreich.org 70
i static int beput(struct bctx *bctx, void *buf, size_t n, unsigned char *md); Err bitreich.org 70
i static int beget(struct bctx *bctx, unsigned char *md, void *buf, size_t *n); Err bitreich.org 70
i static int berm(struct bctx *bctx, unsigned char *md); Err bitreich.org 70
i@@ -93,23 +96,23 @@ packed(void *buf, struct ed *ed) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static int Err bitreich.org 70
i-becreat(struct bctx *bctx, char *path, int mode, struct bparam *bpar) Err bitreich.org 70
i+becreat(struct bctx *bctx, char *path, int mode) Err bitreich.org 70
i { Err bitreich.org 70
i struct ectx *ectx; Err bitreich.org 70
i int type; Err bitreich.org 70
i Err bitreich.org 70
i /* Determine algorithm type */ Err bitreich.org 70
i- if (strcasecmp(bpar->ealgo, "none") == 0) { Err bitreich.org 70
i+ if (strcasecmp(param.ealgo, "none") == 0) { Err bitreich.org 70
i type = EDNONETYPE; Err bitreich.org 70
i- } else if (strcasecmp(bpar->ealgo, "XChaCha20-Poly1305") == 0) { Err bitreich.org 70
i+ } else if (strcasecmp(param.ealgo, "XChaCha20-Poly1305") == 0) { Err bitreich.org 70
i type = EDCHACHATYPE; Err bitreich.org 70
i } else { Err bitreich.org 70
i- bseterr("invalid encryption type: %s", bpar->ealgo); Err bitreich.org 70
i+ bseterr("invalid encryption type: %s", param.ealgo); Err bitreich.org 70
i return -1; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i /* Ensure that if caller requested encryption, a key was provided */ Err bitreich.org 70
i- if (type != EDNONETYPE && bpar->key == NULL) { Err bitreich.org 70
i+ if (type != EDNONETYPE && !param.keyloaded) { Err bitreich.org 70
i bseterr("expected encryption key"); Err bitreich.org 70
i return -1; Err bitreich.org 70
i } Err bitreich.org 70
i@@ -126,10 +129,9 @@ becreat(struct bctx *bctx, char *path, int mode, struct bparam *bpar) Err bitreich.org 70
i } Err bitreich.org 70
i ectx = bctx->ectx; Err bitreich.org 70
i ectx->type = type; Err bitreich.org 70
i- if (bpar->key != NULL) Err bitreich.org 70
i- memcpy(ectx->key, bpar->key, KEYSIZE); Err bitreich.org 70
i+ memcpy(ectx->key, param.key, KEYSIZE); Err bitreich.org 70
i Err bitreich.org 70
i- if (bstorageops()->creat(bctx, path, mode, bpar) < 0) { Err bitreich.org 70
i+ if (bstorageops()->creat(bctx, path, mode) < 0) { Err bitreich.org 70
i free(ectx); Err bitreich.org 70
i return -1; Err bitreich.org 70
i } Err bitreich.org 70
i@@ -137,7 +139,7 @@ becreat(struct bctx *bctx, char *path, int mode, struct bparam *bpar) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static int Err bitreich.org 70
i-beopen(struct bctx *bctx, char *path, int flags, int mode, struct bparam *bpar) Err bitreich.org 70
i+beopen(struct bctx *bctx, char *path, int flags, int mode) Err bitreich.org 70
i { Err bitreich.org 70
i struct ectx *ectx; Err bitreich.org 70
i Err bitreich.org 70
i@@ -147,28 +149,27 @@ beopen(struct bctx *bctx, char *path, int flags, int mode, struct bparam *bpar) Err bitreich.org 70
i return -1; Err bitreich.org 70
i } Err bitreich.org 70
i ectx = bctx->ectx; Err bitreich.org 70
i- if (bpar->key != NULL) Err bitreich.org 70
i- memcpy(ectx->key, bpar->key, KEYSIZE); Err bitreich.org 70
i+ memcpy(ectx->key, param.key, KEYSIZE); Err bitreich.org 70
i Err bitreich.org 70
i- if (bstorageops()->open(bctx, path, flags, mode, bpar) < 0) { Err bitreich.org 70
i+ if (bstorageops()->open(bctx, path, flags, mode) < 0) { Err bitreich.org 70
i free(ectx); Err bitreich.org 70
i return -1; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i /* Determine algorithm type */ Err bitreich.org 70
i- if (strcasecmp(bpar->ealgo, "none") == 0) Err bitreich.org 70
i+ if (strcasecmp(param.ealgo, "none") == 0) Err bitreich.org 70
i ectx->type = EDNONETYPE; Err bitreich.org 70
i- else if (strcasecmp(bpar->ealgo, "XChaCha20-Poly1305") == 0) Err bitreich.org 70
i+ else if (strcasecmp(param.ealgo, "XChaCha20-Poly1305") == 0) Err bitreich.org 70
i ectx->type = EDCHACHATYPE; Err bitreich.org 70
i else { Err bitreich.org 70
i bstorageops()->close(bctx); Err bitreich.org 70
i free(ectx); Err bitreich.org 70
i- bseterr("invalid encryption type: %s", bpar->ealgo); Err bitreich.org 70
i+ bseterr("invalid encryption type: %s", param.ealgo); Err bitreich.org 70
i return -1; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i /* Ensure that if repo is encrypted, a key was provided */ Err bitreich.org 70
i- if (ectx->type != EDNONETYPE && bpar->key == NULL) { Err bitreich.org 70
i+ if (ectx->type != EDNONETYPE && !param.keyloaded) { Err bitreich.org 70
i bstorageops()->close(bctx); Err bitreich.org 70
i free(ectx); Err bitreich.org 70
i bseterr("expected encryption key"); Err bitreich.org 70
1diff --git a/block.c b/block.c /scm/dedup/file/block.c.gph bitreich.org 70
i@@ -16,7 +16,7 @@ Err bitreich.org 70
i static char errbuf[NERRBUF]; Err bitreich.org 70
i Err bitreich.org 70
i int Err bitreich.org 70
i-bcreat(char *path, int mode, struct bparam *bpar, struct bctx **bctx) Err bitreich.org 70
i+bcreat(char *path, int mode, struct bctx **bctx) Err bitreich.org 70
i { Err bitreich.org 70
i struct bops *bops; Err bitreich.org 70
i Err bitreich.org 70
i@@ -25,9 +25,6 @@ bcreat(char *path, int mode, struct bparam *bpar, struct bctx **bctx) Err bitreich.org 70
i return -1; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i- if (bpar == NULL) Err bitreich.org 70
i- bpar = bparamdef(); Err bitreich.org 70
i- Err bitreich.org 70
i *bctx = calloc(1, sizeof(**bctx)); Err bitreich.org 70
i if (*bctx == NULL) { Err bitreich.org 70
i bseterr("calloc: %s", strerror(errno)); Err bitreich.org 70
i@@ -35,7 +32,7 @@ bcreat(char *path, int mode, struct bparam *bpar, struct bctx **bctx) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i bops = bcompressops(); Err bitreich.org 70
i- if (bops->creat(*bctx, path, mode, bpar) < 0) { Err bitreich.org 70
i+ if (bops->creat(*bctx, path, mode) < 0) { Err bitreich.org 70
i free(*bctx); Err bitreich.org 70
i return -1; Err bitreich.org 70
i } Err bitreich.org 70
i@@ -43,11 +40,11 @@ bcreat(char *path, int mode, struct bparam *bpar, struct bctx **bctx) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i int Err bitreich.org 70
i-bopen(char *path, int flags, int mode, struct bparam *bpar, struct bctx **bctx) Err bitreich.org 70
i+bopen(char *path, int flags, int mode, struct bctx **bctx) Err bitreich.org 70
i { Err bitreich.org 70
i struct bops *bops; Err bitreich.org 70
i Err bitreich.org 70
i- if (path == NULL || bpar == NULL || bctx == NULL) { Err bitreich.org 70
i+ if (path == NULL || bctx == NULL) { Err bitreich.org 70
i bseterr("invalid params"); Err bitreich.org 70
i return -1; Err bitreich.org 70
i } Err bitreich.org 70
i@@ -59,7 +56,7 @@ bopen(char *path, int flags, int mode, struct bparam *bpar, struct bctx **bctx) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i bops = bcompressops(); Err bitreich.org 70
i- if (bops->open(*bctx, path, flags, mode, bpar) < 0) { Err bitreich.org 70
i+ if (bops->open(*bctx, path, flags, mode) < 0) { Err bitreich.org 70
i free(*bctx); Err bitreich.org 70
i return -1; Err bitreich.org 70
i } Err bitreich.org 70
i@@ -169,18 +166,6 @@ bclose(struct bctx *bctx) Err bitreich.org 70
i return r; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i-struct bparam * Err bitreich.org 70
i-bparamdef(void) Err bitreich.org 70
i-{ Err bitreich.org 70
i- static struct bparam bpar = { Err bitreich.org 70
i- .calgo = "snappy", Err bitreich.org 70
i- .ealgo = "none", Err bitreich.org 70
i- .key = NULL Err bitreich.org 70
i- }; Err bitreich.org 70
i- Err bitreich.org 70
i- return &bpar; Err bitreich.org 70
i-} Err bitreich.org 70
i- Err bitreich.org 70
i void Err bitreich.org 70
i bseterr(char *fmt, ...) Err bitreich.org 70
i { Err bitreich.org 70
1diff --git a/block.h b/block.h /scm/dedup/file/block.h.gph bitreich.org 70
i@@ -10,19 +10,13 @@ struct bctx { Err bitreich.org 70
i void *sctx; /* storage layer context */ Err bitreich.org 70
i }; Err bitreich.org 70
i Err bitreich.org 70
i-struct bparam { Err bitreich.org 70
i- char *calgo; Err bitreich.org 70
i- char *ealgo; Err bitreich.org 70
i- unsigned char *key; Err bitreich.org 70
i-}; Err bitreich.org 70
i- Err bitreich.org 70
i /* Err bitreich.org 70
i * Block operations structure. Err bitreich.org 70
i * This is implemented by each of the block layers. Err bitreich.org 70
i */ Err bitreich.org 70
i struct bops { Err bitreich.org 70
i- int (*creat)(struct bctx *, char *, int, struct bparam *); Err bitreich.org 70
i- int (*open)(struct bctx *, char *, int, int, struct bparam *); Err bitreich.org 70
i+ int (*creat)(struct bctx *, char *, int); Err bitreich.org 70
i+ int (*open)(struct bctx *, char *, int, int); Err bitreich.org 70
i int (*put)(struct bctx *, void *, size_t, unsigned char *); Err bitreich.org 70
i int (*get)(struct bctx *, unsigned char *, void *, size_t *); Err bitreich.org 70
i int (*rm)(struct bctx *, unsigned char *); Err bitreich.org 70
i@@ -33,8 +27,8 @@ struct bops { Err bitreich.org 70
i }; Err bitreich.org 70
i Err bitreich.org 70
i /* block.c */ Err bitreich.org 70
i-extern int bcreat(char *, int, struct bparam *, struct bctx **); Err bitreich.org 70
i-extern int bopen(char *, int, int, struct bparam *, struct bctx **); Err bitreich.org 70
i+extern int bcreat(char *, int, struct bctx **); Err bitreich.org 70
i+extern int bopen(char *, int, int, struct bctx **); Err bitreich.org 70
i extern int bput(struct bctx *, void *, size_t, unsigned char *); Err bitreich.org 70
i extern int bget(struct bctx *, unsigned char *, void *, size_t *); Err bitreich.org 70
i extern int brm(struct bctx *, unsigned char *); Err bitreich.org 70
i@@ -42,7 +36,6 @@ extern int bgc(struct bctx *); Err bitreich.org 70
i extern int bcheck(struct bctx *, unsigned char *); Err bitreich.org 70
i extern int bsync(struct bctx *); Err bitreich.org 70
i extern int bclose(struct bctx *); Err bitreich.org 70
i-extern struct bparam *bparamdef(void); Err bitreich.org 70
i extern void bseterr(char *, ...); Err bitreich.org 70
i extern void berr(char *, ...); Err bitreich.org 70
i Err bitreich.org 70
1diff --git a/bstorage.c b/bstorage.c /scm/dedup/file/bstorage.c.gph bitreich.org 70
i@@ -40,17 +40,6 @@ Err bitreich.org 70
i #define VMAJSHIFT 8 Err bitreich.org 70
i #define VMAJMASK 0xff Err bitreich.org 70
i Err bitreich.org 70
i-#define CALGOSHIFT 16 Err bitreich.org 70
i-#define CALGOMASK 0x7 Err bitreich.org 70
i-#define CNONETYPE 0 Err bitreich.org 70
i-#define CSNAPPYTYPE 1 Err bitreich.org 70
i-#define CLZ4TYPE 2 Err bitreich.org 70
i- Err bitreich.org 70
i-#define EALGOSHIFT 19 Err bitreich.org 70
i-#define EALGOMASK 0x7 Err bitreich.org 70
i-#define ENONETYPE 0 Err bitreich.org 70
i-#define ECHACHATYPE 1 Err bitreich.org 70
i- Err bitreich.org 70
i #define BHDRSIZE (NBHDRMAGIC + 8 + 8) Err bitreich.org 70
i Err bitreich.org 70
i /* block descriptor constants */ Err bitreich.org 70
i@@ -61,8 +50,8 @@ Err bitreich.org 70
i extern int pack(unsigned char *, char *, ...); Err bitreich.org 70
i extern int unpack(unsigned char *, char *, ...); Err bitreich.org 70
i Err bitreich.org 70
i-static int bscreat(struct bctx *, char *, int, struct bparam *); Err bitreich.org 70
i-static int bsopen(struct bctx *, char *, int, int, struct bparam *); Err bitreich.org 70
i+static int bscreat(struct bctx *, char *, int); Err bitreich.org 70
i+static int bsopen(struct bctx *, char *, int, int); Err bitreich.org 70
i static int bsput(struct bctx *, void *, size_t, unsigned char *); Err bitreich.org 70
i static int bsget(struct bctx *, unsigned char *, void *, size_t *); Err bitreich.org 70
i static int bsrm(struct bctx *, unsigned char *); Err bitreich.org 70
i@@ -307,7 +296,7 @@ initbdcache(struct sctx *sctx) Err bitreich.org 70
i Err bitreich.org 70
i /* Create storage file */ Err bitreich.org 70
i static int Err bitreich.org 70
i-bscreat(struct bctx *bctx, char *path, int mode, struct bparam *bpar) Err bitreich.org 70
i+bscreat(struct bctx *bctx, char *path, int mode) Err bitreich.org 70
i { Err bitreich.org 70
i struct sctx *sctx; Err bitreich.org 70
i struct bhdr *bhdr; Err bitreich.org 70
i@@ -339,32 +328,6 @@ bscreat(struct bctx *bctx, char *path, int mode, struct bparam *bpar) Err bitreich.org 70
i bhdr = &sctx->bhdr; Err bitreich.org 70
i memcpy(bhdr->magic, BHDRMAGIC, NBHDRMAGIC); Err bitreich.org 70
i bhdr->flags = (VMAJ << VMAJSHIFT) | VMIN; Err bitreich.org 70
i- Err bitreich.org 70
i- /* Set compression type */ Err bitreich.org 70
i- if (strcasecmp(bpar->calgo, "none") == 0) { Err bitreich.org 70
i- bhdr->flags |= CNONETYPE << CALGOSHIFT; Err bitreich.org 70
i- } else if (strcasecmp(bpar->calgo, "snappy") == 0) { Err bitreich.org 70
i- bhdr->flags |= CSNAPPYTYPE << CALGOSHIFT; Err bitreich.org 70
i- } else if (strcasecmp(bpar->calgo, "lz4") == 0) { Err bitreich.org 70
i- bhdr->flags |= CLZ4TYPE << CALGOSHIFT; Err bitreich.org 70
i- } else { Err bitreich.org 70
i- free(sctx); Err bitreich.org 70
i- close(fd); Err bitreich.org 70
i- bseterr("invalid compression type: %s", bpar->calgo); Err bitreich.org 70
i- return -1; Err bitreich.org 70
i- } Err bitreich.org 70
i- Err bitreich.org 70
i- /* Set encryption type */ Err bitreich.org 70
i- if (strcasecmp(bpar->ealgo, "none") == 0) { Err bitreich.org 70
i- bhdr->flags |= ENONETYPE << EALGOSHIFT; Err bitreich.org 70
i- } else if (strcasecmp(bpar->ealgo, "XChaCha20-Poly1305") == 0) { Err bitreich.org 70
i- bhdr->flags |= ECHACHATYPE << EALGOSHIFT; Err bitreich.org 70
i- } else { Err bitreich.org 70
i- free(sctx); Err bitreich.org 70
i- close(fd); Err bitreich.org 70
i- bseterr("invalid encryption type: %s", bpar->ealgo); Err bitreich.org 70
i- return -1; Err bitreich.org 70
i- } Err bitreich.org 70
i bhdr->nbd = 0; Err bitreich.org 70
i Err bitreich.org 70
i if (packbhdr(fd, bhdr) < 0) { Err bitreich.org 70
i@@ -377,7 +340,7 @@ bscreat(struct bctx *bctx, char *path, int mode, struct bparam *bpar) Err bitreich.org 70
i Err bitreich.org 70
i /* Open storage file */ Err bitreich.org 70
i static int Err bitreich.org 70
i-bsopen(struct bctx *bctx, char *path, int flags, int mode, struct bparam *bpar) Err bitreich.org 70
i+bsopen(struct bctx *bctx, char *path, int flags, int mode) Err bitreich.org 70
i { Err bitreich.org 70
i struct sctx *sctx; Err bitreich.org 70
i struct bhdr *bhdr; Err bitreich.org 70
i@@ -439,41 +402,6 @@ bsopen(struct bctx *bctx, char *path, int flags, int mode, struct bparam *bpar) Err bitreich.org 70
i return -1; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i- /* Populate bparam compression algo */ Err bitreich.org 70
i- algo = (bhdr->flags >> CALGOSHIFT) & CALGOMASK; Err bitreich.org 70
i- switch (algo) { Err bitreich.org 70
i- case CNONETYPE: Err bitreich.org 70
i- bpar->calgo = "none"; Err bitreich.org 70
i- break; Err bitreich.org 70
i- case CSNAPPYTYPE: Err bitreich.org 70
i- bpar->calgo = "snappy"; Err bitreich.org 70
i- break; Err bitreich.org 70
i- case CLZ4TYPE: Err bitreich.org 70
i- bpar->calgo = "lz4"; Err bitreich.org 70
i- break; Err bitreich.org 70
i- default: Err bitreich.org 70
i- free(sctx); Err bitreich.org 70
i- close(fd); Err bitreich.org 70
i- bseterr("invalid compression type: %d", algo); Err bitreich.org 70
i- return -1; Err bitreich.org 70
i- } Err bitreich.org 70
i- Err bitreich.org 70
i- /* Populate bparam encryption algo */ Err bitreich.org 70
i- algo = (bhdr->flags >> EALGOSHIFT) & EALGOMASK; Err bitreich.org 70
i- switch (algo) { Err bitreich.org 70
i- case ENONETYPE: Err bitreich.org 70
i- bpar->ealgo = "none"; Err bitreich.org 70
i- break; Err bitreich.org 70
i- case ECHACHATYPE: Err bitreich.org 70
i- bpar->ealgo = "XChaCha20-Poly1305"; Err bitreich.org 70
i- break; Err bitreich.org 70
i- default: Err bitreich.org 70
i- free(sctx); Err bitreich.org 70
i- close(fd); Err bitreich.org 70
i- bseterr("invalid encryption type: %d", algo); Err bitreich.org 70
i- return -1; Err bitreich.org 70
i- } Err bitreich.org 70
i- Err bitreich.org 70
i sctx->fd = fd; Err bitreich.org 70
i sctx->rdonly = flags == O_RDONLY; Err bitreich.org 70
i Err bitreich.org 70
1diff --git a/dup-check.c b/dup-check.c /scm/dedup/file/dup-check.c.gph bitreich.org 70
i@@ -16,11 +16,48 @@ Err bitreich.org 70
i #include "key.h" Err bitreich.org 70
i #include "lock.h" Err bitreich.org 70
i #include "snap.h" Err bitreich.org 70
i+#include "state.h" Err bitreich.org 70
i Err bitreich.org 70
i+struct param param; Err bitreich.org 70
i int verbose; Err bitreich.org 70
i char *argv0; Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i+initparam(char *repo) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ char path[PATH_MAX]; Err bitreich.org 70
i+ int fd; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (snprintf(path, sizeof(path), "%s/state", repo) >= sizeof(path)) Err bitreich.org 70
i+ errx(1, "snprintf: %s: path too long", path); Err bitreich.org 70
i+ fd = open(path, O_RDONLY); Err bitreich.org 70
i+ if (fd < 0) Err bitreich.org 70
i+ err(1, "open: %s", path); Err bitreich.org 70
i+ if (loadstate(fd, ¶m) < 0) Err bitreich.org 70
i+ errx(1, "loadstate: failed"); Err bitreich.org 70
i+ if (close(fd) < 0) Err bitreich.org 70
i+ err(1, "close: %s", path); Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+static void Err bitreich.org 70
i+initkey(char *keyfile) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ int fd; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (keyfile == NULL) Err bitreich.org 70
i+ return; Err bitreich.org 70
i+ Err bitreich.org 70
i+ fd = open(keyfile, O_RDONLY); Err bitreich.org 70
i+ if (fd < 0) Err bitreich.org 70
i+ err(1, "open: %s", keyfile); Err bitreich.org 70
i+ if (loadkey(fd, param.key, sizeof(param.key)) < 0) Err bitreich.org 70
i+ errx(1, "loadkey: failed"); Err bitreich.org 70
i+ param.keyloaded = 1; Err bitreich.org 70
i+ if (close(fd) < 0) Err bitreich.org 70
i+ err(1, "close: %s", keyfile); Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+static void Err bitreich.org 70
i check(struct sctx *sctx, struct bctx *bctx) Err bitreich.org 70
i { Err bitreich.org 70
i unsigned char md[MDSIZE]; Err bitreich.org 70
i@@ -56,10 +93,8 @@ main(int argc, char *argv[]) Err bitreich.org 70
i { Err bitreich.org 70
i char spath[PATH_MAX]; Err bitreich.org 70
i char bpath[PATH_MAX]; Err bitreich.org 70
i- unsigned char key[KEYSIZE]; Err bitreich.org 70
i struct sctx *sctx; Err bitreich.org 70
i struct bctx *bctx; Err bitreich.org 70
i- struct bparam bpar; Err bitreich.org 70
i char *keyfile = NULL; Err bitreich.org 70
i char *repo = "."; Err bitreich.org 70
i int lfd; Err bitreich.org 70
i@@ -81,21 +116,6 @@ main(int argc, char *argv[]) Err bitreich.org 70
i if (argc != 1) Err bitreich.org 70
i usage(); Err bitreich.org 70
i Err bitreich.org 70
i- if (keyfile != NULL) { Err bitreich.org 70
i- int fd; Err bitreich.org 70
i- Err bitreich.org 70
i- fd = open(keyfile, O_RDONLY); Err bitreich.org 70
i- if (fd < 0) Err bitreich.org 70
i- err(1, "open: %s", keyfile); Err bitreich.org 70
i- if (loadkey(fd, key, sizeof(key)) < 0) Err bitreich.org 70
i- errx(1, "loadkey: failed"); Err bitreich.org 70
i- bpar.key = key; Err bitreich.org 70
i- if (close(fd) < 0) Err bitreich.org 70
i- err(1, "close: %s", keyfile); Err bitreich.org 70
i- } else { Err bitreich.org 70
i- bpar.key = NULL; Err bitreich.org 70
i- } Err bitreich.org 70
i- Err bitreich.org 70
i if (snprintf(spath, sizeof(spath), "%s/archive/%s", Err bitreich.org 70
i repo, argv[0]) >= sizeof(spath)) Err bitreich.org 70
i errx(1, "snprintf: %s: path too long", spath); Err bitreich.org 70
i@@ -105,9 +125,13 @@ main(int argc, char *argv[]) Err bitreich.org 70
i Err bitreich.org 70
i if ((lfd = lockrepo(repo)) < 0) Err bitreich.org 70
i errx(1, "failed to lock repository"); Err bitreich.org 70
i+ Err bitreich.org 70
i+ initparam(repo); Err bitreich.org 70
i+ initkey(keyfile); Err bitreich.org 70
i+ Err bitreich.org 70
i if (sopen(spath, S_READ, 0600, &sctx) < 0) Err bitreich.org 70
i serr("sopen: %s", spath); Err bitreich.org 70
i- if (bopen(bpath, B_READ, 0600, &bpar, &bctx) <0) Err bitreich.org 70
i+ if (bopen(bpath, B_READ, 0600, &bctx) <0) Err bitreich.org 70
i berr("bopen: %s", bpath); Err bitreich.org 70
i Err bitreich.org 70
i check(sctx, bctx); Err bitreich.org 70
i@@ -116,6 +140,7 @@ main(int argc, char *argv[]) Err bitreich.org 70
i berr("bclose: %s", bpath); Err bitreich.org 70
i if (sclose(sctx) < 0) Err bitreich.org 70
i serr("sclose: %s", spath); Err bitreich.org 70
i+ Err bitreich.org 70
i if (unlockrepo(lfd) < 0) Err bitreich.org 70
i errx(1, "failed to unlock repository"); Err bitreich.org 70
i Err bitreich.org 70
1diff --git a/dup-gc.c b/dup-gc.c /scm/dedup/file/dup-gc.c.gph bitreich.org 70
i@@ -14,11 +14,48 @@ Err bitreich.org 70
i #include "key.h" Err bitreich.org 70
i #include "lock.h" Err bitreich.org 70
i #include "snap.h" Err bitreich.org 70
i+#include "state.h" Err bitreich.org 70
i Err bitreich.org 70
i+struct param param; Err bitreich.org 70
i int verbose; Err bitreich.org 70
i char *argv0; Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i+initparam(char *repo) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ char path[PATH_MAX]; Err bitreich.org 70
i+ int fd; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (snprintf(path, sizeof(path), "%s/state", repo) >= sizeof(path)) Err bitreich.org 70
i+ errx(1, "snprintf: %s: path too long", path); Err bitreich.org 70
i+ fd = open(path, O_RDONLY); Err bitreich.org 70
i+ if (fd < 0) Err bitreich.org 70
i+ err(1, "open: %s", path); Err bitreich.org 70
i+ if (loadstate(fd, ¶m) < 0) Err bitreich.org 70
i+ errx(1, "loadstate: failed"); Err bitreich.org 70
i+ if (close(fd) < 0) Err bitreich.org 70
i+ err(1, "close: %s", path); Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+static void Err bitreich.org 70
i+initkey(char *keyfile) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ int fd; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (keyfile == NULL) Err bitreich.org 70
i+ return; Err bitreich.org 70
i+ Err bitreich.org 70
i+ fd = open(keyfile, O_RDONLY); Err bitreich.org 70
i+ if (fd < 0) Err bitreich.org 70
i+ err(1, "open: %s", keyfile); Err bitreich.org 70
i+ if (loadkey(fd, param.key, sizeof(param.key)) < 0) Err bitreich.org 70
i+ errx(1, "loadkey: failed"); Err bitreich.org 70
i+ param.keyloaded = 1; Err bitreich.org 70
i+ if (close(fd) < 0) Err bitreich.org 70
i+ err(1, "close: %s", keyfile); Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+static void Err bitreich.org 70
i usage(void) Err bitreich.org 70
i { Err bitreich.org 70
i fprintf(stderr, "usage: %s [-v] [-k keyfile] [repo]\n", argv0); Err bitreich.org 70
i@@ -29,9 +66,7 @@ int Err bitreich.org 70
i main(int argc, char *argv[]) Err bitreich.org 70
i { Err bitreich.org 70
i char path[PATH_MAX]; Err bitreich.org 70
i- unsigned char key[KEYSIZE]; Err bitreich.org 70
i struct bctx *bctx; Err bitreich.org 70
i- struct bparam bpar; Err bitreich.org 70
i char *keyfile = NULL; Err bitreich.org 70
i char *repo; Err bitreich.org 70
i int lfd; Err bitreich.org 70
i@@ -58,33 +93,23 @@ main(int argc, char *argv[]) Err bitreich.org 70
i usage(); Err bitreich.org 70
i }; Err bitreich.org 70
i Err bitreich.org 70
i- if (keyfile != NULL) { Err bitreich.org 70
i- int fd; Err bitreich.org 70
i- Err bitreich.org 70
i- fd = open(keyfile, O_RDONLY); Err bitreich.org 70
i- if (fd < 0) Err bitreich.org 70
i- err(1, "open: %s", keyfile); Err bitreich.org 70
i- if (loadkey(fd, key, sizeof(key)) < 0) Err bitreich.org 70
i- errx(1, "loadkey: failed"); Err bitreich.org 70
i- bpar.key = key; Err bitreich.org 70
i- if (close(fd) < 0) Err bitreich.org 70
i- err(1, "close: %s", keyfile); Err bitreich.org 70
i- } else { Err bitreich.org 70
i- bpar.key = NULL; Err bitreich.org 70
i- } Err bitreich.org 70
i- Err bitreich.org 70
i if (snprintf(path, sizeof(path), "%s/%s", Err bitreich.org 70
i repo, STORAGEPATH) >= sizeof(path)) Err bitreich.org 70
i errx(1, "snprintf: %s: path too long", path); Err bitreich.org 70
i Err bitreich.org 70
i if ((lfd = lockrepo(repo)) < 0) Err bitreich.org 70
i errx(1, "failed to lock repository"); Err bitreich.org 70
i- if (bopen(path, B_RDWR, 0600, &bpar, &bctx) < 0) Err bitreich.org 70
i+ Err bitreich.org 70
i+ initparam(repo); Err bitreich.org 70
i+ initkey(keyfile); Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (bopen(path, B_RDWR, 0600, &bctx) < 0) Err bitreich.org 70
i berr("bopen: %s", path); Err bitreich.org 70
i if (bgc(bctx) < 0) Err bitreich.org 70
i berr("bgc: %s", path); Err bitreich.org 70
i if (bclose(bctx) < 0) Err bitreich.org 70
i berr("bclose: %s", path); Err bitreich.org 70
i+ Err bitreich.org 70
i if (unlockrepo(lfd) < 0) Err bitreich.org 70
i errx(1, "failed to unlock repository"); Err bitreich.org 70
i return 0; Err bitreich.org 70
1diff --git a/dup-init.c b/dup-init.c /scm/dedup/file/dup-init.c.gph bitreich.org 70
i@@ -15,11 +15,48 @@ Err bitreich.org 70
i #include "lock.h" Err bitreich.org 70
i #include "misc.h" Err bitreich.org 70
i #include "snap.h" Err bitreich.org 70
i+#include "state.h" Err bitreich.org 70
i Err bitreich.org 70
i+struct param param; Err bitreich.org 70
i int verbose; Err bitreich.org 70
i char *argv0; Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i+initparam(char *repo) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ char path[PATH_MAX]; Err bitreich.org 70
i+ int fd; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (snprintf(path, sizeof(path), "%s/state", repo) >= sizeof(path)) Err bitreich.org 70
i+ errx(1, "snprintf: %s: path too long", path); Err bitreich.org 70
i+ fd = open(path, O_RDWR | O_CREAT | O_EXCL, 0600); Err bitreich.org 70
i+ if (fd < 0) Err bitreich.org 70
i+ err(1, "open: %s", path); Err bitreich.org 70
i+ if (savestate(fd, ¶m) < 0) Err bitreich.org 70
i+ errx(1, "loadstate: failed"); Err bitreich.org 70
i+ if (close(fd) < 0) Err bitreich.org 70
i+ err(1, "close: %s", path); Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+static void Err bitreich.org 70
i+initkey(char *keyfile) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ int fd; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (keyfile == NULL) Err bitreich.org 70
i+ return; Err bitreich.org 70
i+ Err bitreich.org 70
i+ fd = open(keyfile, O_RDONLY); Err bitreich.org 70
i+ if (fd < 0) Err bitreich.org 70
i+ err(1, "open: %s", keyfile); Err bitreich.org 70
i+ if (loadkey(fd, param.key, sizeof(param.key)) < 0) Err bitreich.org 70
i+ errx(1, "loadkey: failed"); Err bitreich.org 70
i+ param.keyloaded = 1; Err bitreich.org 70
i+ if (close(fd) < 0) Err bitreich.org 70
i+ err(1, "close: %s", keyfile); Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+static void Err bitreich.org 70
i usage(void) Err bitreich.org 70
i { Err bitreich.org 70
i fprintf(stderr, "usage: %s [-v] [-E algo] [-Z algo] [-k keyfile] [repo]\n", argv0); Err bitreich.org 70
i@@ -31,25 +68,23 @@ main(int argc, char *argv[]) Err bitreich.org 70
i { Err bitreich.org 70
i char spath[PATH_MAX]; Err bitreich.org 70
i char bpath[PATH_MAX]; Err bitreich.org 70
i- unsigned char key[KEYSIZE]; Err bitreich.org 70
i struct bctx *bctx; Err bitreich.org 70
i- struct bparam bpar; Err bitreich.org 70
i char *keyfile = NULL; Err bitreich.org 70
i char *repo; Err bitreich.org 70
i int lfd; Err bitreich.org 70
i Err bitreich.org 70
i- bpar.calgo = bparamdef()->calgo; Err bitreich.org 70
i- bpar.ealgo = bparamdef()->ealgo; Err bitreich.org 70
i+ param.calgo = "snappy"; Err bitreich.org 70
i+ param.ealgo = "none"; Err bitreich.org 70
i Err bitreich.org 70
i ARGBEGIN { Err bitreich.org 70
i case 'k': Err bitreich.org 70
i keyfile = EARGF(usage()); Err bitreich.org 70
i break; Err bitreich.org 70
i case 'E': Err bitreich.org 70
i- bpar.ealgo = EARGF(usage()); Err bitreich.org 70
i+ param.ealgo = EARGF(usage()); Err bitreich.org 70
i break; Err bitreich.org 70
i case 'Z': Err bitreich.org 70
i- bpar.calgo = EARGF(usage()); Err bitreich.org 70
i+ param.calgo = EARGF(usage()); Err bitreich.org 70
i break; Err bitreich.org 70
i case 'v': Err bitreich.org 70
i verbose++; Err bitreich.org 70
i@@ -69,21 +104,6 @@ main(int argc, char *argv[]) Err bitreich.org 70
i usage(); Err bitreich.org 70
i }; Err bitreich.org 70
i Err bitreich.org 70
i- if (keyfile != NULL) { Err bitreich.org 70
i- int fd; Err bitreich.org 70
i- Err bitreich.org 70
i- fd = open(keyfile, O_RDONLY); Err bitreich.org 70
i- if (fd < 0) Err bitreich.org 70
i- err(1, "open: %s", keyfile); Err bitreich.org 70
i- if (loadkey(fd, key, sizeof(key)) < 0) Err bitreich.org 70
i- errx(1, "loadkey: failed"); Err bitreich.org 70
i- bpar.key = key; Err bitreich.org 70
i- if (close(fd) < 0) Err bitreich.org 70
i- err(1, "close: %s", keyfile); Err bitreich.org 70
i- } else { Err bitreich.org 70
i- bpar.key = NULL; Err bitreich.org 70
i- } Err bitreich.org 70
i- Err bitreich.org 70
i if (snprintf(spath, sizeof(spath), "%s/%s", Err bitreich.org 70
i repo, ARCHIVEPATH) >= sizeof(spath)) Err bitreich.org 70
i errx(1, "snprintf: %s: path too long", spath); Err bitreich.org 70
i@@ -91,13 +111,15 @@ main(int argc, char *argv[]) Err bitreich.org 70
i repo, STORAGEPATH) >= sizeof(bpath)) Err bitreich.org 70
i errx(1, "snprintf: %s: path too long", bpath); Err bitreich.org 70
i Err bitreich.org 70
i+ initkey(keyfile); Err bitreich.org 70
i if (mkdir(repo, 0700) < 0) Err bitreich.org 70
i err(1, "mkdir: %s", repo); Err bitreich.org 70
i if ((lfd = lockrepo(repo)) < 0) Err bitreich.org 70
i errx(1, "failed to lock repository"); Err bitreich.org 70
i if (mkdir(spath, 0700) < 0) Err bitreich.org 70
i err(1, "mkdir: %s", spath); Err bitreich.org 70
i- if (bcreat(bpath, 0600, &bpar, &bctx) < 0) Err bitreich.org 70
i+ initparam(repo); Err bitreich.org 70
i+ if (bcreat(bpath, 0600, &bctx) < 0) Err bitreich.org 70
i berr("bcreat: %s", bpath); Err bitreich.org 70
i if (bclose(bctx) < 0) Err bitreich.org 70
i berr("bclose: %s", bpath); Err bitreich.org 70
1diff --git a/dup-keygen.c b/dup-keygen.c /scm/dedup/file/dup-keygen.c.gph bitreich.org 70
i@@ -10,7 +10,9 @@ Err bitreich.org 70
i #include "arg.h" Err bitreich.org 70
i #include "config.h" Err bitreich.org 70
i #include "key.h" Err bitreich.org 70
i+#include "state.h" Err bitreich.org 70
i Err bitreich.org 70
i+struct param param; /* unused */ Err bitreich.org 70
i int verbose; Err bitreich.org 70
i char *argv0; Err bitreich.org 70
i Err bitreich.org 70
1diff --git a/dup-pack.c b/dup-pack.c /scm/dedup/file/dup-pack.c.gph bitreich.org 70
i@@ -15,11 +15,48 @@ Err bitreich.org 70
i #include "key.h" Err bitreich.org 70
i #include "lock.h" Err bitreich.org 70
i #include "snap.h" Err bitreich.org 70
i+#include "state.h" Err bitreich.org 70
i Err bitreich.org 70
i+struct param param; Err bitreich.org 70
i int verbose; Err bitreich.org 70
i char *argv0; Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i+initparam(char *repo) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ char path[PATH_MAX]; Err bitreich.org 70
i+ int fd; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (snprintf(path, sizeof(path), "%s/state", repo) >= sizeof(path)) Err bitreich.org 70
i+ errx(1, "snprintf: %s: path too long", path); Err bitreich.org 70
i+ fd = open(path, O_RDONLY); Err bitreich.org 70
i+ if (fd < 0) Err bitreich.org 70
i+ err(1, "open: %s", path); Err bitreich.org 70
i+ if (loadstate(fd, ¶m) < 0) Err bitreich.org 70
i+ errx(1, "loadstate: failed"); Err bitreich.org 70
i+ if (close(fd) < 0) Err bitreich.org 70
i+ err(1, "close: %s", path); Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+static void Err bitreich.org 70
i+initkey(char *keyfile) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ int fd; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (keyfile == NULL) Err bitreich.org 70
i+ return; Err bitreich.org 70
i+ Err bitreich.org 70
i+ fd = open(keyfile, O_RDONLY); Err bitreich.org 70
i+ if (fd < 0) Err bitreich.org 70
i+ err(1, "open: %s", keyfile); Err bitreich.org 70
i+ if (loadkey(fd, param.key, sizeof(param.key)) < 0) Err bitreich.org 70
i+ errx(1, "loadkey: failed"); Err bitreich.org 70
i+ param.keyloaded = 1; Err bitreich.org 70
i+ if (close(fd) < 0) Err bitreich.org 70
i+ err(1, "close: %s", keyfile); Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+static void Err bitreich.org 70
i pack(struct sctx *sctx, struct bctx *bctx) Err bitreich.org 70
i { Err bitreich.org 70
i struct chunker *c; Err bitreich.org 70
i@@ -61,7 +98,6 @@ main(int argc, char *argv[]) Err bitreich.org 70
i unsigned char key[KEYSIZE]; Err bitreich.org 70
i struct sctx *sctx; Err bitreich.org 70
i struct bctx *bctx; Err bitreich.org 70
i- struct bparam bpar; Err bitreich.org 70
i char *keyfile = NULL; Err bitreich.org 70
i char *repo = "."; Err bitreich.org 70
i int lfd; Err bitreich.org 70
i@@ -83,21 +119,6 @@ main(int argc, char *argv[]) Err bitreich.org 70
i if (argc != 1) Err bitreich.org 70
i usage(); Err bitreich.org 70
i Err bitreich.org 70
i- if (keyfile != NULL) { Err bitreich.org 70
i- int fd; Err bitreich.org 70
i- Err bitreich.org 70
i- fd = open(keyfile, O_RDONLY); Err bitreich.org 70
i- if (fd < 0) Err bitreich.org 70
i- err(1, "open: %s", keyfile); Err bitreich.org 70
i- if (loadkey(fd, key, sizeof(key)) < 0) Err bitreich.org 70
i- errx(1, "loadkey: failed"); Err bitreich.org 70
i- bpar.key = key; Err bitreich.org 70
i- if (close(fd) < 0) Err bitreich.org 70
i- err(1, "close: %s", keyfile); Err bitreich.org 70
i- } else { Err bitreich.org 70
i- bpar.key = NULL; Err bitreich.org 70
i- } Err bitreich.org 70
i- Err bitreich.org 70
i if (snprintf(spath, sizeof(spath), "%s/archive/%s", Err bitreich.org 70
i repo, argv[0]) >= sizeof(spath)) Err bitreich.org 70
i errx(1, "snprintf: %s: path too long", spath); Err bitreich.org 70
i@@ -107,9 +128,13 @@ main(int argc, char *argv[]) Err bitreich.org 70
i Err bitreich.org 70
i if ((lfd = lockrepo(repo)) < 0) Err bitreich.org 70
i errx(1, "failed to lock repository"); Err bitreich.org 70
i+ Err bitreich.org 70
i+ initparam(repo); Err bitreich.org 70
i+ initkey(keyfile); Err bitreich.org 70
i+ Err bitreich.org 70
i if (screat(spath, 0600, &sctx) < 0) Err bitreich.org 70
i serr("screat: %s", spath); Err bitreich.org 70
i- if (bopen(bpath, B_RDWR, 0600, &bpar, &bctx) <0) Err bitreich.org 70
i+ if (bopen(bpath, B_RDWR, 0600, &bctx) <0) Err bitreich.org 70
i berr("bopen: %s", bpath); Err bitreich.org 70
i Err bitreich.org 70
i pack(sctx, bctx); Err bitreich.org 70
i@@ -118,6 +143,7 @@ main(int argc, char *argv[]) Err bitreich.org 70
i berr("bclose: %s", bpath); Err bitreich.org 70
i if (sclose(sctx) < 0) Err bitreich.org 70
i serr("sclose: %s", spath); Err bitreich.org 70
i+ Err bitreich.org 70
i if (unlockrepo(lfd) < 0) Err bitreich.org 70
i errx(1, "failed to unlock repository"); Err bitreich.org 70
i return 0; Err bitreich.org 70
1diff --git a/dup-rm.c b/dup-rm.c /scm/dedup/file/dup-rm.c.gph bitreich.org 70
i@@ -14,11 +14,48 @@ Err bitreich.org 70
i #include "key.h" Err bitreich.org 70
i #include "lock.h" Err bitreich.org 70
i #include "snap.h" Err bitreich.org 70
i+#include "state.h" Err bitreich.org 70
i Err bitreich.org 70
i+struct param param; Err bitreich.org 70
i int verbose; Err bitreich.org 70
i char *argv0; Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i+initparam(char *repo) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ char path[PATH_MAX]; Err bitreich.org 70
i+ int fd; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (snprintf(path, sizeof(path), "%s/state", repo) >= sizeof(path)) Err bitreich.org 70
i+ errx(1, "snprintf: %s: path too long", path); Err bitreich.org 70
i+ fd = open(path, O_RDONLY); Err bitreich.org 70
i+ if (fd < 0) Err bitreich.org 70
i+ err(1, "open: %s", path); Err bitreich.org 70
i+ if (loadstate(fd, ¶m) < 0) Err bitreich.org 70
i+ errx(1, "loadstate: failed"); Err bitreich.org 70
i+ if (close(fd) < 0) Err bitreich.org 70
i+ err(1, "close: %s", path); Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+static void Err bitreich.org 70
i+initkey(char *keyfile) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ int fd; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (keyfile == NULL) Err bitreich.org 70
i+ return; Err bitreich.org 70
i+ Err bitreich.org 70
i+ fd = open(keyfile, O_RDONLY); Err bitreich.org 70
i+ if (fd < 0) Err bitreich.org 70
i+ err(1, "open: %s", keyfile); Err bitreich.org 70
i+ if (loadkey(fd, param.key, sizeof(param.key)) < 0) Err bitreich.org 70
i+ errx(1, "loadkey: failed"); Err bitreich.org 70
i+ param.keyloaded = 1; Err bitreich.org 70
i+ if (close(fd) < 0) Err bitreich.org 70
i+ err(1, "close: %s", keyfile); Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+static void Err bitreich.org 70
i rm(struct sctx *sctx, struct bctx *bctx) Err bitreich.org 70
i { Err bitreich.org 70
i unsigned char md[MDSIZE]; Err bitreich.org 70
i@@ -47,7 +84,6 @@ main(int argc, char *argv[]) Err bitreich.org 70
i unsigned char key[KEYSIZE]; Err bitreich.org 70
i struct sctx *sctx; Err bitreich.org 70
i struct bctx *bctx; Err bitreich.org 70
i- struct bparam bpar; Err bitreich.org 70
i char *keyfile = NULL; Err bitreich.org 70
i char *repo = "."; Err bitreich.org 70
i int lfd; Err bitreich.org 70
i@@ -69,21 +105,6 @@ main(int argc, char *argv[]) Err bitreich.org 70
i if (argc != 1) Err bitreich.org 70
i usage(); Err bitreich.org 70
i Err bitreich.org 70
i- if (keyfile != NULL) { Err bitreich.org 70
i- int fd; Err bitreich.org 70
i- Err bitreich.org 70
i- fd = open(keyfile, O_RDONLY); Err bitreich.org 70
i- if (fd < 0) Err bitreich.org 70
i- err(1, "open: %s", keyfile); Err bitreich.org 70
i- if (loadkey(fd, key, sizeof(key)) < 0) Err bitreich.org 70
i- errx(1, "loadkey: failed"); Err bitreich.org 70
i- bpar.key = key; Err bitreich.org 70
i- if (close(fd) < 0) Err bitreich.org 70
i- err(1, "close: %s", keyfile); Err bitreich.org 70
i- } else { Err bitreich.org 70
i- bpar.key = NULL; Err bitreich.org 70
i- } Err bitreich.org 70
i- Err bitreich.org 70
i if (snprintf(spath, sizeof(spath), "%s/archive/%s", Err bitreich.org 70
i repo, argv[0]) >= sizeof(spath)) Err bitreich.org 70
i errx(1, "snprintf: %s: path too long", spath); Err bitreich.org 70
i@@ -93,9 +114,13 @@ main(int argc, char *argv[]) Err bitreich.org 70
i Err bitreich.org 70
i if ((lfd = lockrepo(repo)) < 0) Err bitreich.org 70
i errx(1, "failed to lock repository"); Err bitreich.org 70
i+ Err bitreich.org 70
i+ initparam(repo); Err bitreich.org 70
i+ initkey(keyfile); Err bitreich.org 70
i+ Err bitreich.org 70
i if (sopen(spath, S_READ, 0600, &sctx) < 0) Err bitreich.org 70
i serr("sopen: %s", spath); Err bitreich.org 70
i- if (bopen(bpath, B_RDWR, 0600, &bpar, &bctx) <0) Err bitreich.org 70
i+ if (bopen(bpath, B_RDWR, 0600, &bctx) <0) Err bitreich.org 70
i berr("bopen: %s", bpath); Err bitreich.org 70
i Err bitreich.org 70
i rm(sctx, bctx); Err bitreich.org 70
i@@ -106,6 +131,7 @@ main(int argc, char *argv[]) Err bitreich.org 70
i serr("sclose: %s", spath); Err bitreich.org 70
i if (unlink(spath) < 0) Err bitreich.org 70
i err(1, "unlink: %s", spath); Err bitreich.org 70
i+ Err bitreich.org 70
i if (unlockrepo(lfd) < 0) Err bitreich.org 70
i errx(1, "failed to unlock repository"); Err bitreich.org 70
i Err bitreich.org 70
1diff --git a/dup-unpack.c b/dup-unpack.c /scm/dedup/file/dup-unpack.c.gph bitreich.org 70
i@@ -15,11 +15,48 @@ Err bitreich.org 70
i #include "lock.h" Err bitreich.org 70
i #include "misc.h" Err bitreich.org 70
i #include "snap.h" Err bitreich.org 70
i+#include "state.h" Err bitreich.org 70
i Err bitreich.org 70
i+struct param param; Err bitreich.org 70
i int verbose; Err bitreich.org 70
i char *argv0; Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i+initparam(char *repo) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ char path[PATH_MAX]; Err bitreich.org 70
i+ int fd; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (snprintf(path, sizeof(path), "%s/state", repo) >= sizeof(path)) Err bitreich.org 70
i+ errx(1, "snprintf: %s: path too long", path); Err bitreich.org 70
i+ fd = open(path, O_RDONLY); Err bitreich.org 70
i+ if (fd < 0) Err bitreich.org 70
i+ err(1, "open: %s", path); Err bitreich.org 70
i+ if (loadstate(fd, ¶m) < 0) Err bitreich.org 70
i+ errx(1, "loadstate: failed"); Err bitreich.org 70
i+ if (close(fd) < 0) Err bitreich.org 70
i+ err(1, "close: %s", path); Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+static void Err bitreich.org 70
i+initkey(char *keyfile) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ int fd; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (keyfile == NULL) Err bitreich.org 70
i+ return; Err bitreich.org 70
i+ Err bitreich.org 70
i+ fd = open(keyfile, O_RDONLY); Err bitreich.org 70
i+ if (fd < 0) Err bitreich.org 70
i+ err(1, "open: %s", keyfile); Err bitreich.org 70
i+ if (loadkey(fd, param.key, sizeof(param.key)) < 0) Err bitreich.org 70
i+ errx(1, "loadkey: failed"); Err bitreich.org 70
i+ param.keyloaded = 1; Err bitreich.org 70
i+ if (close(fd) < 0) Err bitreich.org 70
i+ err(1, "close: %s", keyfile); Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+static void Err bitreich.org 70
i unpack(struct sctx *sctx, struct bctx *bctx) Err bitreich.org 70
i { Err bitreich.org 70
i unsigned char md[MDSIZE]; Err bitreich.org 70
i@@ -57,7 +94,6 @@ main(int argc, char *argv[]) Err bitreich.org 70
i unsigned char key[KEYSIZE]; Err bitreich.org 70
i struct sctx *sctx; Err bitreich.org 70
i struct bctx *bctx; Err bitreich.org 70
i- struct bparam bpar; Err bitreich.org 70
i char *keyfile = NULL; Err bitreich.org 70
i char *repo = "."; Err bitreich.org 70
i int lfd; Err bitreich.org 70
i@@ -79,21 +115,6 @@ main(int argc, char *argv[]) Err bitreich.org 70
i if (argc != 1) Err bitreich.org 70
i usage(); Err bitreich.org 70
i Err bitreich.org 70
i- if (keyfile != NULL) { Err bitreich.org 70
i- int fd; Err bitreich.org 70
i- Err bitreich.org 70
i- fd = open(keyfile, O_RDONLY); Err bitreich.org 70
i- if (fd < 0) Err bitreich.org 70
i- err(1, "open: %s", keyfile); Err bitreich.org 70
i- if (loadkey(fd, key, sizeof(key)) < 0) Err bitreich.org 70
i- errx(1, "loadkey: failed"); Err bitreich.org 70
i- bpar.key = key; Err bitreich.org 70
i- if (close(fd) < 0) Err bitreich.org 70
i- err(1, "close: %s", keyfile); Err bitreich.org 70
i- } else { Err bitreich.org 70
i- bpar.key = NULL; Err bitreich.org 70
i- } Err bitreich.org 70
i- Err bitreich.org 70
i if (snprintf(spath, sizeof(spath), "%s/archive/%s", Err bitreich.org 70
i repo, argv[0]) >= sizeof(spath)) Err bitreich.org 70
i errx(1, "snprintf: %s: path too long", spath); Err bitreich.org 70
i@@ -103,9 +124,13 @@ main(int argc, char *argv[]) Err bitreich.org 70
i Err bitreich.org 70
i if ((lfd = lockrepo(repo)) < 0) Err bitreich.org 70
i errx(1, "failed to lock repository"); Err bitreich.org 70
i+ Err bitreich.org 70
i+ initparam(repo); Err bitreich.org 70
i+ initkey(keyfile); Err bitreich.org 70
i+ Err bitreich.org 70
i if (sopen(spath, S_READ, 0600, &sctx) < 0) Err bitreich.org 70
i serr("sopen: %s", spath); Err bitreich.org 70
i- if (bopen(bpath, B_READ, 0600, &bpar, &bctx) <0) Err bitreich.org 70
i+ if (bopen(bpath, B_READ, 0600, &bctx) <0) Err bitreich.org 70
i berr("bopen: %s", bpath); Err bitreich.org 70
i Err bitreich.org 70
i unpack(sctx, bctx); Err bitreich.org 70
i@@ -114,6 +139,7 @@ main(int argc, char *argv[]) Err bitreich.org 70
i berr("bclose: %s", bpath); Err bitreich.org 70
i if (sclose(sctx) < 0) Err bitreich.org 70
i serr("sclose: %s", spath); Err bitreich.org 70
i+ Err bitreich.org 70
i if (unlockrepo(lfd) < 0) Err bitreich.org 70
i errx(1, "failed to unlock repository"); Err bitreich.org 70
i Err bitreich.org 70
1diff --git a/state.c b/state.c /scm/dedup/file/state.c.gph bitreich.org 70
i@@ -4,6 +4,7 @@ Err bitreich.org 70
i #include <string.h> Err bitreich.org 70
i #include <strings.h> Err bitreich.org 70
i Err bitreich.org 70
i+#include "config.h" Err bitreich.org 70
i #include "misc.h" Err bitreich.org 70
i #include "state.h" Err bitreich.org 70
i Err bitreich.org 70
1diff --git a/state.h b/state.h /scm/dedup/file/state.h.gph bitreich.org 70
i@@ -1,4 +1,9 @@ Err bitreich.org 70
i struct param { Err bitreich.org 70
i char *calgo; Err bitreich.org 70
i char *ealgo; Err bitreich.org 70
i+ unsigned char key[KEYSIZE]; Err bitreich.org 70
i+ int keyloaded; Err bitreich.org 70
i }; Err bitreich.org 70
i+ Err bitreich.org 70
i+int savestate(int, struct param *); Err bitreich.org 70
i+int loadstate(int fd, struct param *); Err bitreich.org 70
.
Response:
text/plain