diff -r 3e20fd78e555 -r b6ff6be7aa91 dav/sync.c --- 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);