dav/config.c

changeset 43
03076907b58a
parent 40
a95ee94b9204
child 73
41e88442ad4e
--- a/dav/config.c	Tue Mar 18 13:59:02 2014 +0100
+++ b/dav/config.c	Thu Jun 05 15:11:29 2014 +0200
@@ -111,8 +111,10 @@
 void load_repository(xmlNode *reponode) {
     xmlNode *node = reponode->children;
     Repository *repo = calloc(1, sizeof(Repository));
-    repo->store_key_property = true;
-    repo->decrypt = false;
+    repo->encrypt_name = false;
+    repo->encrypt_content = false;
+    repo->decrypt_name = false;
+    repo->decrypt_content = true;
     while(node) {
         if(node->type == XML_ELEMENT_NODE) {
             char *value = util_xml_get_text(node);
@@ -128,12 +130,37 @@
                 repo->password = util_base64decode(value);
             } else if(xstreq(node->name, "default-key")) {
                 repo->default_key = strdup(value);
-            } else if(xstreq(node->name, "encrypt")) {
-                repo->encrypt = util_getboolean(value);
-            } else if(xstreq(node->name, "decrypt")) {
-                repo->decrypt = util_getboolean(value);
-            } else if(xstreq(node->name, "store-key-property")) {
-                repo->store_key_property = util_getboolean(value);
+            } else if(xstreq(node->name, "full-encryption")) {
+                if(util_getboolean(value)) {
+                    repo->encrypt_name = true;
+                    repo->encrypt_content = true;
+                    repo->decrypt_name = true;
+                    repo->decrypt_content = true;
+                }
+            } else if(xstreq(node->name, "content-encryption")) {
+                if(util_getboolean(value)) {
+                    repo->encrypt_content = true;
+                    repo->decrypt_content = true;
+                } else {
+                    repo->encrypt_content = false;
+                }
+            } else if(xstreq(node->name, "decrypt-content")) {
+                repo->decrypt_content = util_getboolean(value);
+            } else if(xstreq(node->name, "decrypt-name")) {
+                repo->decrypt_name = util_getboolean(value);
+            } else if(xstreq(node->name, "encrypt") || xstreq(node->name, "store-key-property") || xstreq(node->name, "decrypt")) {
+                fprintf(stderr, "Error: config.xml contains deprecated elements\n");
+                fprintf(stderr, "The elements <encrypt>, <decrypt> and <store-key-property> are removed\n");
+                fprintf(stderr, "Use the following: \n\n");
+                fprintf(stderr, "<content-encryption>true</content-encryption>\n");
+                fprintf(stderr, "enables file content encryption and decryption\n\n");
+                fprintf(stderr, "<full-encryption>true</full-encryption>\n");
+                fprintf(stderr, "enables content and file name encryption/decryption\n\n");
+                fprintf(stderr, "<decrypt-content>$BOOL</decrypt-content>\n");
+                fprintf(stderr, "only enables/disables content decryption\n\n");
+                fprintf(stderr, "<decrypt-name>$BOOL</decrypt-name>\n");
+                fprintf(stderr, "only enables/disables name decryption\n\n");
+                exit(-1);
             }
         }
         node = node->next;
@@ -283,6 +310,24 @@
     return ucx_map_sstr_get(repos, name);
 }
 
+int get_repository_flags(Repository *repo) {
+    int flags = 0;
+    if(repo->decrypt_content) {
+        flags |= DAV_SESSION_DECRYPT_CONTENT;
+    }
+    if(repo->decrypt_name) {
+        flags |= DAV_SESSION_DECRYPT_NAME;
+    }
+    if(repo->encrypt_content) {
+        flags |= DAV_SESSION_ENCRYPT_CONTENT;
+    }
+    if(repo->encrypt_name) {
+        flags |= DAV_SESSION_ENCRYPT_NAME;
+    }
+    return flags;
+}
+
+
 Key* get_key(char *name) {
     if(!name) {
         return NULL;

mercurial