summaryrefslogtreecommitdiffstats
path: root/src/tools/sssctl/sssctl_data.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/sssctl/sssctl_data.c')
-rw-r--r--src/tools/sssctl/sssctl_data.c44
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;
+}