From 353faffe13852c4204f158b5d4301405bd222c44 Mon Sep 17 00:00:00 2001 From: Michal Vasko Date: Fri, 20 Dec 2019 13:40:35 +0100 Subject: [PATCH] sysrpeo-plugind BUGFIX create plugins dir recursively Refs #1719 --- src/executables/sysrepo-plugind.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/executables/sysrepo-plugind.c b/src/executables/sysrepo-plugind.c index ddb41c26e..ca22140e7 100644 --- a/src/executables/sysrepo-plugind.c +++ b/src/executables/sysrepo-plugind.c @@ -206,6 +206,34 @@ daemon_init(int debug, sr_log_level_t log_level) sr_log_syslog("sysrepo-plugind", log_level); } +/* from src/common.c */ +int +sr_mkpath(const char *path, mode_t mode) +{ + char *p, *dup; + + dup = strdup(path); + for (p = strchr(dup + 1, '/'); p; p = strchr(p + 1, '/')) { + *p = '\0'; + if (mkdir(dup, mode) == -1) { + if (errno != EEXIST) { + *p = '/'; + return -1; + } + } + *p = '/'; + } + free(dup); + + if (mkdir(path, mode) == -1) { + if (errno != EEXIST) { + return -1; + } + } + + return 0; +} + static int load_plugins(struct srpd_plugin_s **plugins, int *plugin_count) { @@ -231,7 +259,7 @@ load_plugins(struct srpd_plugin_s **plugins, int *plugin_count) error_print(0, "Checking plugins dir existence failed (%s).", strerror(errno)); return -1; } - if (mkdir(plugins_dir, 00777) == -1) { + if (sr_mkpath(plugins_dir, 00777) == -1) { error_print(0, "Creating plugins dir \"%s\" failed (%s).", plugins_dir, strerror(errno)); return -1; }