From 83008d8da84f5dfd4fe774ceee7b23b13ea2e8f5 Mon Sep 17 00:00:00 2001 From: Tomas Rivera Date: Wed, 22 Apr 2026 12:00:47 +0200 Subject: [PATCH] Backup: Fix (#3) rsync arguments were not stored correcly --- src/main.c | 5 ++++- src/utils.c | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main.c b/src/main.c index 873f33f..2f5d6cc 100644 --- a/src/main.c +++ b/src/main.c @@ -221,11 +221,14 @@ arg_next: cJSON *rsyncArgsJSON = cJSON_GetObjectItem(backupJSON, "rsyncArgs"); if (rsyncArgsJSON && cJSON_IsArray(rsyncArgsJSON)) { // if it is what we expected rsyncArgsNumber = cJSON_GetArraySize(rsyncArgsJSON); + debug("In %s, rsyncArgsNumber is calculated to %d.", configPath, rsyncArgsNumber); rsyncArgs = realloc(rsyncArgs, (size_t)rsyncArgsNumber); + debug("In %c, rsyncArgs are:", configPath); for (int i = 0; i < rsyncArgsNumber; i++) { cJSON *argJSON = cJSON_GetArrayItem(rsyncArgsJSON, i); if (argJSON && cJSON_IsString(argJSON)) { - rsyncArgs[i] = cJSON_GetStringValue(argJSON); + rsyncArgs[i] = strdup(cJSON_GetStringValue(argJSON)); + altDebug("%s\n", rsyncArgs[i]); } else {error(1, "user", "One element in rsyncArgs array in %s is not a string", configPath);} } } else {error(1, "user", "%s did not contained a rsyncArgs array inside the backup section or the value is from an unexpected type", configPath);} diff --git a/src/utils.c b/src/utils.c index 73449ae..40c65b6 100644 --- a/src/utils.c +++ b/src/utils.c @@ -73,6 +73,7 @@ void _error(const int shouldDebug, const int condition, const char *type, const static void copyDir(const char *source, const char *destination, const char **rsyncArgs, const int rsyncArgsNumber, const int shouldDebug) { debug("Backuping... source: %s and destination: %s", source, destination); + debug("Rsync has %d extra arguments", rsyncArgsNumber); pid_t pid = fork(); error(pid < 0, "program", "fork() faild. pid = %d", pid); @@ -87,6 +88,11 @@ static void copyDir(const char *source, const char *destination, const char **rs args[i+2] = (char*)source; args[i+3] = (char*)destination; args[i+4] = NULL; // execvp expect last arg to be NULL + debug("rsync command:"); + for (int k = 0; k <= i+4; k++) { + altDebug("%s ", args[k]); + } + altDebug("\n"); } } execvp("rsync", args);