iUse a type field in snap.c - 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 ba06cd1fc2b7c9c50147f5af8898e524cfb741b6 /scm/dedup/commit/ba06cd1fc2b7c9c50147f5af8898e524cfb741b6.gph bitreich.org 70
1parent 17e33eb2f548925c5a1fead6c2bfe65f6f16cade /scm/dedup/commit/17e33eb2f548925c5a1fead6c2bfe65f6f16cade.gph bitreich.org 70
hAuthor: sin <sin@2f30.org> URL:mailto:sin@2f30.org bitreich.org 70
iDate: Fri, 17 May 2019 14:28:53 +0300 Err bitreich.org 70
i Err bitreich.org 70
iUse a type field in snap.c Err bitreich.org 70
i Err bitreich.org 70
iSimilar to how it is done for the compression/encryption modules. Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M snap.c | 36 +++++++++++++++++-------------- Err bitreich.org 70
i Err bitreich.org 70
i1 file changed, 20 insertions(+), 16 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/snap.c b/snap.c /scm/dedup/file/snap.c.gph bitreich.org 70
i@@ -21,6 +21,10 @@ 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+/* snapshot encryption algorithms */ Err bitreich.org 70
i+#define SNONETYPE 0x400 Err bitreich.org 70
i+#define SCHACHATYPE 0x401 Err bitreich.org 70
i+ Err bitreich.org 70
i /* snapshot header constants */ Err bitreich.org 70
i #define SHDRMAGIC "SNAPSNAPPYSNOOP" Err bitreich.org 70
i #define NSHDRMAGIC sizeof(SHDRMAGIC) Err bitreich.org 70
i@@ -55,7 +59,7 @@ struct mdnode { Err bitreich.org 70
i struct sctx { Err bitreich.org 70
i TAILQ_HEAD(mdhead, mdnode) mdhead; /* list of hashes contained in snapshot */ Err bitreich.org 70
i struct mdnode *mdnext; /* next hash to be returned via sget() */ Err bitreich.org 70
i- int crypto; /* when set, snapshots are encrypted */ Err bitreich.org 70
i+ int type; /* encryption algorithm */ Err bitreich.org 70
i int fd; /* underlying snapshot file descriptor */ Err bitreich.org 70
i int rdonly; /* when set, ssync() is a no-op */ Err bitreich.org 70
i struct shdr shdr; /* snapshot header */ Err bitreich.org 70
i@@ -114,7 +118,7 @@ loadmdnone(struct sctx *sctx, int first) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static int Err bitreich.org 70
i-loadmdcrypto(struct sctx *sctx, int first) Err bitreich.org 70
i+loadmdchacha(struct sctx *sctx, int first) Err bitreich.org 70
i { Err bitreich.org 70
i unsigned char buf[MDSIZE + crypto_secretstream_xchacha20poly1305_ABYTES]; Err bitreich.org 70
i unsigned char hdr[SHDRSIZE]; Err bitreich.org 70
i@@ -161,10 +165,10 @@ initmdhead(struct sctx *sctx) Err bitreich.org 70
i int (*loadmd)(struct sctx *, int); Err bitreich.org 70
i uint64_t i; Err bitreich.org 70
i Err bitreich.org 70
i- if (!sctx->crypto) Err bitreich.org 70
i+ if (sctx->type == SNONETYPE) Err bitreich.org 70
i loadmd = loadmdnone; Err bitreich.org 70
i else Err bitreich.org 70
i- loadmd = loadmdcrypto; Err bitreich.org 70
i+ loadmd = loadmdchacha; Err bitreich.org 70
i Err bitreich.org 70
i shdr = &sctx->shdr; Err bitreich.org 70
i for (i = 0; i < shdr->nbd; i++) { Err bitreich.org 70
i@@ -188,7 +192,7 @@ screat(char *path, int mode, struct sctx **sctx) Err bitreich.org 70
i { Err bitreich.org 70
i unsigned char buf[SHDRSIZE]; Err bitreich.org 70
i struct shdr *shdr; Err bitreich.org 70
i- int crypto; Err bitreich.org 70
i+ int type; Err bitreich.org 70
i int fd; Err bitreich.org 70
i Err bitreich.org 70
i if (path == NULL || sctx == NULL) { Err bitreich.org 70
i@@ -198,16 +202,16 @@ screat(char *path, int mode, struct sctx **sctx) Err bitreich.org 70
i Err bitreich.org 70
i /* Determine algorithm type */ Err bitreich.org 70
i if (strcasecmp(param.ealgo, "none") == 0) { Err bitreich.org 70
i- crypto = 0; Err bitreich.org 70
i+ type = SNONETYPE; Err bitreich.org 70
i } else if (strcasecmp(param.ealgo, "XChaCha20-Poly1305") == 0) { Err bitreich.org 70
i- crypto = 1; Err bitreich.org 70
i+ type = SCHACHATYPE; Err bitreich.org 70
i } else { Err bitreich.org 70
i seterr("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 a key has been provided if caller requested encryption */ Err bitreich.org 70
i- if (crypto && !param.keyloaded) { Err bitreich.org 70
i+ if (type != SNONETYPE && !param.keyloaded) { Err bitreich.org 70
i seterr("expected encryption key"); Err bitreich.org 70
i return -1; Err bitreich.org 70
i } Err bitreich.org 70
i@@ -232,7 +236,7 @@ screat(char *path, int mode, struct sctx **sctx) Err bitreich.org 70
i Err bitreich.org 70
i TAILQ_INIT(&(*sctx)->mdhead); Err bitreich.org 70
i (*sctx)->mdnext = NULL; Err bitreich.org 70
i- (*sctx)->crypto = crypto; Err bitreich.org 70
i+ (*sctx)->type = type; Err bitreich.org 70
i (*sctx)->fd = fd; Err bitreich.org 70
i Err bitreich.org 70
i shdr = &(*sctx)->shdr; Err bitreich.org 70
i@@ -255,7 +259,7 @@ sopen(char *path, int flags, int mode, struct sctx **sctx) Err bitreich.org 70
i { Err bitreich.org 70
i unsigned char buf[SHDRSIZE]; Err bitreich.org 70
i struct shdr *shdr; Err bitreich.org 70
i- int crypto; Err bitreich.org 70
i+ int type; Err bitreich.org 70
i int fd; Err bitreich.org 70
i Err bitreich.org 70
i if (path == NULL || sctx == NULL) { Err bitreich.org 70
i@@ -271,9 +275,9 @@ sopen(char *path, int flags, int mode, struct sctx **sctx) Err bitreich.org 70
i Err bitreich.org 70
i /* Determine algorithm type */ Err bitreich.org 70
i if (strcasecmp(param.ealgo, "none") == 0) { Err bitreich.org 70
i- crypto = 0; Err bitreich.org 70
i+ type = SNONETYPE; Err bitreich.org 70
i } else if (strcasecmp(param.ealgo, "XChaCha20-Poly1305") == 0) { Err bitreich.org 70
i- crypto = 1; Err bitreich.org 70
i+ type = SCHACHATYPE; Err bitreich.org 70
i } else { Err bitreich.org 70
i seterr("invalid encryption type: %s", param.ealgo); Err bitreich.org 70
i return -1; Err bitreich.org 70
i@@ -299,7 +303,7 @@ sopen(char *path, int flags, int mode, struct sctx **sctx) Err bitreich.org 70
i Err bitreich.org 70
i TAILQ_INIT(&(*sctx)->mdhead); Err bitreich.org 70
i (*sctx)->mdnext = NULL; Err bitreich.org 70
i- (*sctx)->crypto = crypto; Err bitreich.org 70
i+ (*sctx)->type = type; Err bitreich.org 70
i (*sctx)->fd = fd; Err bitreich.org 70
i (*sctx)->rdonly = 1; Err bitreich.org 70
i Err bitreich.org 70
i@@ -418,7 +422,7 @@ syncnone(struct sctx *sctx) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static int Err bitreich.org 70
i-synccrypto(struct sctx *sctx) Err bitreich.org 70
i+syncchacha(struct sctx *sctx) Err bitreich.org 70
i { Err bitreich.org 70
i unsigned char hdr[SHDRSIZE]; Err bitreich.org 70
i crypto_secretstream_xchacha20poly1305_state state; Err bitreich.org 70
i@@ -474,10 +478,10 @@ ssync(struct sctx *sctx) Err bitreich.org 70
i return -1; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i- if (!sctx->crypto) Err bitreich.org 70
i+ if (sctx->type == SNONETYPE) Err bitreich.org 70
i syncnone(sctx); Err bitreich.org 70
i else Err bitreich.org 70
i- synccrypto(sctx); Err bitreich.org 70
i+ syncchacha(sctx); Err bitreich.org 70
i Err bitreich.org 70
i fsync(sctx->fd); Err bitreich.org 70
i return 0; Err bitreich.org 70
.
Response:
text/plain