diff options
Diffstat (limited to 'src/tools/sssctl/sssctl_data.c')
-rw-r--r-- | src/tools/sssctl/sssctl_data.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/tools/sssctl/sssctl_data.c b/src/tools/sssctl/sssctl_data.c index 860c5df55..4b7f1dfff 100644 --- a/src/tools/sssctl/sssctl_data.c +++ b/src/tools/sssctl/sssctl_data.c @@ -30,6 +30,7 @@ #define SSS_BACKUP_DIR SSS_STATEDIR "/backup" #define SSS_BACKUP_USER_OVERRIDES SSS_BACKUP_DIR "/sssd_user_overrides.bak" #define SSS_BACKUP_GROUP_OVERRIDES SSS_BACKUP_DIR "/sssd_group_overrides.bak" +#define SSS_CACHE "sss_cache" struct sssctl_data_opts { int override; @@ -289,3 +290,46 @@ errno_t sssctl_cache_upgrade(struct sss_cmdline *cmdline, return EOK; } + +errno_t sssctl_cache_expire(struct sss_cmdline *cmdline, + struct sss_tool_ctx *tool_ctx, + void *pvt) +{ + errno_t ret; + char *cmd_args = NULL; + const char *cachecmd = SSS_CACHE; + char *cmd = NULL; + int i; + + if (cmdline->argc == 0) { + ret = sssctl_run_command(cachecmd); + goto done; + } + + cmd_args = talloc_strdup(tool_ctx, ""); + if (cmd_args == NULL) { + ret = ENOMEM; + goto done; + } + + for (i = 0; i < cmdline->argc; i++) { + cmd_args = talloc_strdup_append(cmd_args, cmdline->argv[i]); + if (i != cmdline->argc - 1) { + cmd_args = talloc_strdup_append(cmd_args, " "); + } + } + + cmd = talloc_asprintf(tool_ctx, "%s %s", cachecmd, cmd_args); + if (cmd == NULL) { + ret = ENOMEM; + goto done; + } + + ret = sssctl_run_command(cmd); + +done: + talloc_free(cmd_args); + talloc_free(cmd); + + return ret; +} |