summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustin Stephenson <jstephen@redhat.com>2017-07-23 17:33:35 -0400
committerLukas Slebodnik <lslebodn@redhat.com>2017-09-25 21:50:38 +0200
commitf74408e37a3007aa41b19ab2afb693a91694da42 (patch)
tree3334aa60a88e40231ae18f534b271561bb316323
parentda19eaea902744ec3cb41f87fa93fadb767f90e7 (diff)
downloadsssd-f74408e37a3007aa41b19ab2afb693a91694da42.tar.gz
sssd-f74408e37a3007aa41b19ab2afb693a91694da42.tar.xz
sssd-f74408e37a3007aa41b19ab2afb693a91694da42.zip
SSSCTL: Add cache-expire command
Add sssctl cache-expire as a wrapper for the sss_cache utility to invalidate cached objects. Reviewed-by: Lukáš Slebodník <lslebodn@redhat.com> Reviewed-by: Jakub Hrozek <jhrozek@redhat.com> Reviewed-by: Michal Židek <mzidek@redhat.com>
-rw-r--r--src/tools/sssctl/sssctl.c1
-rw-r--r--src/tools/sssctl/sssctl.h4
-rw-r--r--src/tools/sssctl/sssctl_data.c44
3 files changed, 49 insertions, 0 deletions
diff --git a/src/tools/sssctl/sssctl.c b/src/tools/sssctl/sssctl.c
index 5b66fcd1a..1e061c00d 100644
--- a/src/tools/sssctl/sssctl.c
+++ b/src/tools/sssctl/sssctl.c
@@ -273,6 +273,7 @@ int main(int argc, const char **argv)
SSS_TOOL_COMMAND("client-data-restore", "Restore local data from backup", 0, sssctl_client_data_restore),
SSS_TOOL_COMMAND("cache-remove", "Backup local data and remove cached content", 0, sssctl_cache_remove),
SSS_TOOL_COMMAND("cache-upgrade", "Perform cache upgrade", ERR_SYSDB_VERSION_TOO_OLD, sssctl_cache_upgrade),
+ SSS_TOOL_COMMAND("cache-expire", "Invalidate cached objects", 0, sssctl_cache_expire),
SSS_TOOL_DELIMITER("Log files tools:"),
SSS_TOOL_COMMAND("logs-remove", "Remove existing SSSD log files", 0, sssctl_logs_remove),
SSS_TOOL_COMMAND("logs-fetch", "Archive SSSD log files in tarball", 0, sssctl_logs_fetch),
diff --git a/src/tools/sssctl/sssctl.h b/src/tools/sssctl/sssctl.h
index 9b3fd66a8..22ca5d41e 100644
--- a/src/tools/sssctl/sssctl.h
+++ b/src/tools/sssctl/sssctl.h
@@ -98,6 +98,10 @@ errno_t sssctl_cache_upgrade(struct sss_cmdline *cmdline,
struct sss_tool_ctx *tool_ctx,
void *pvt);
+errno_t sssctl_cache_expire(struct sss_cmdline *cmdline,
+ struct sss_tool_ctx *tool_ctx,
+ void *pvt);
+
errno_t sssctl_logs_remove(struct sss_cmdline *cmdline,
struct sss_tool_ctx *tool_ctx,
void *pvt);
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;
+}