config-parser: Support limiter.conf in limiter.conf.d 37/318937/5 accepted/tizen_unified_toolchain accepted/tizen/9.0/unified/20241030.233530 accepted/tizen/unified/20241017.114652 accepted/tizen/unified/toolchain/20241022.122354 accepted/tizen/unified/toolchain/20241022.122838 accepted/tizen/unified/x/20241017.170332 accepted/tizen/unified/x/asan/20241022.113428 tizen_9.0_m2_release
authorUnsung <unsung.lee@samsung.com>
Fri, 11 Oct 2024 01:51:34 +0000 (10:51 +0900)
committerUnsung <unsung.lee@samsung.com>
Fri, 11 Oct 2024 06:34:13 +0000 (15:34 +0900)
Support limiter.conf configuration file in limiter.conf.d directory.
Previously, resourced supported only one limiter.conf file included in the project.
Now it has been changed so that each user can replace it with their own limiter.conf file.

Example:
/etc/resourced/limiter.conf -> it will be not used for limiter moudle.
/etc/resourced/limiter.conf.d/limiter.conf -> It will be used for limiter

Change-Id: I59e496c8375667e5a84b5822aeda0df1256993d3
Signed-off-by: Unsung <unsung.lee@samsung.com>
src/common/conf/config-parser.c
src/common/conf/config-parser.h

index ab841391e6f5dd30bf2b22f5a3a3e207e3c54d83..8a314fd700372ddba141d1cb6a7112b74daff554 100644 (file)
@@ -1188,14 +1188,34 @@ static int vendor_config(struct parse_result *result, void *user_data)
        return RESOURCED_ERROR_NONE;
 }
 
+static int filter_limiter_conf_file(const struct dirent *dirent)
+{
+       if (dirent == NULL)
+               return 0;
+
+       return strncmp(dirent->d_name, CONF_FILE_NAME(limiter),
+                               strlen(CONF_FILE_NAME(limiter)) + 1);
+}
+
 static void load_per_vendor_configs(const char *dir, int func(struct parse_result *result,
                                                                void *user_data), void *user_data)
 {
        int count;
        int idx;
        struct dirent **namelist;
+       enum config_type config_type = *((enum config_type*)user_data);
+       int (*filter_func) (const struct dirent *) = NULL;
+
+       switch (config_type) {
+       case LIMITER_CONFIG:
+               filter_func = filter_limiter_conf_file;
+               break;
+       default:
+               filter_func = NULL;
+               break;
+       }
 
-       if ((count = scandir(dir, &namelist, NULL, alphasort)) == -1) {
+       if ((count = scandir(dir, &namelist, filter_func, alphasort)) == -1) {
                _I("(%s) conf dir does not exist", dir);
                return;
        }
@@ -1221,7 +1241,11 @@ void resourced_parse_vendor_configs(void)
        fixed_app_and_service_list_init();
 
        /* Load configurations in limiter.conf and limiter.conf.d/ */
-       config_parse(LIMITER_CONF_FILE, limiter_config, NULL);
+       if (access(LIMITER_CONF_DIR_LIMITER_CONF, F_OK) != 0)
+               config_parse(LIMITER_CONF_FILE, limiter_config, NULL);
+       else
+               config_parse(LIMITER_CONF_DIR_LIMITER_CONF, limiter_config, NULL);
+
        config_type = LIMITER_CONFIG;
        load_per_vendor_configs(LIMITER_CONF_DIR, vendor_config, &config_type);
 
index f7c3249046ad2957614c47a5dd114926d95241c3..df9a18d87801e1f727e03e934eef4d18b9c16f94 100644 (file)
@@ -30,6 +30,10 @@ extern "C" {
 
 #define CONF_FILE_SUFFIX                    ".conf"
 
+#define CONF_FILE_NAME(conf_name)           #conf_name CONF_FILE_SUFFIX
+
+#define LIMITER_CONF_DIR_LIMITER_CONF       LIMITER_CONF_DIR "/" CONF_FILE_NAME(limiter)
+
 #define LIMITER_CONF_FILE                   RD_CONFIG_FILE(limiter)
 #define OPTIMIZER_CONF_FILE                 RD_CONFIG_FILE(optimizer)
 #define PROCESS_CONF_FILE                   RD_CONFIG_FILE(process)