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