dav/sync.c

changeset 347
b6ff6be7aa91
parent 331
9ca1e4706acc
child 361
b6f2462ee055
--- a/dav/sync.c	Thu Dec 14 13:35:03 2017 +0100
+++ b/dav/sync.c	Sat Dec 16 10:37:50 2017 +0100
@@ -258,6 +258,23 @@
     return sn;
 }
 
+static void print_allowed_cmds(SyncDirectory *dir) {
+    fprintf(stderr, "Allowed commands: ");
+    char *sep = "";
+    if((dir->allow_cmd & SYNC_CMD_PULL) == SYNC_CMD_PULL) {
+        fprintf(stderr, "pull");
+        sep = ", ";
+    }
+    if((dir->allow_cmd & SYNC_CMD_PUSH) == SYNC_CMD_PUSH) {
+        fprintf(stderr, "%spush", sep);
+        sep = ", ";
+    }
+    if((dir->allow_cmd & SYNC_CMD_ARCHIVE) == SYNC_CMD_ARCHIVE) {
+        fprintf(stderr, "%sarchive", sep);
+    }
+    fprintf(stderr, "\n");
+}
+
 int cmd_pull(CmdArgs *a) {
     if(a->argc != 1) {
         fprintf(stderr, "Too %s arguments\n", a->argc < 1 ? "few" : "many");
@@ -273,6 +290,12 @@
         return -1;
     }
     
+    if((dir->allow_cmd & SYNC_CMD_PULL) != SYNC_CMD_PULL) {
+        fprintf(stderr, "Command 'pull' is not allowed for this sync dir\n");
+        print_allowed_cmds(dir);
+        return -1;
+    }
+    
     Repository *repo = get_repository(sstr(dir->repository));
     if(!repo) {
         fprintf(stderr, "Unkown repository %s\n", dir->name);
@@ -806,6 +829,13 @@
         return -1;
     }
     
+    int cmd = archive ? SYNC_CMD_ARCHIVE : SYNC_CMD_PUSH;
+    if((dir->allow_cmd & cmd) != cmd) {
+        fprintf(stderr, "Command '%s' is not allowed for this sync dir\n", archive ? "archive" : "push");
+        print_allowed_cmds(dir);
+        return -1;
+    }
+    
     Repository *repo = get_repository(sstr(dir->repository));
     if(!repo) {
         fprintf(stderr, "Unkown repository %s\n", dir->name);

mercurial