diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2013-01-15 11:40:19 +0100 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2013-01-15 20:16:04 +0100 |
commit | 543676afec3c08fdc0a5a794976adc8dfdca974b (patch) | |
tree | 97ade9c8091c0f5d21b9036dbb8ebad93b5b2b47 /src/tools/tools_mc_util.c | |
parent | 82dc11348718bf8e2ff07da696f91f6703293c24 (diff) | |
download | sssd-543676afec3c08fdc0a5a794976adc8dfdca974b.tar.gz sssd-543676afec3c08fdc0a5a794976adc8dfdca974b.tar.xz sssd-543676afec3c08fdc0a5a794976adc8dfdca974b.zip |
TOOLS: Split querying nss responder into a separate function
The tools query the responder in order to sync the memcache after
performing changes to the local database. The functions will be reused
by other tools so I split them into a separate functions.
Diffstat (limited to 'src/tools/tools_mc_util.c')
-rw-r--r-- | src/tools/tools_mc_util.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/tools/tools_mc_util.c b/src/tools/tools_mc_util.c index 5348829eb..a33dfb97c 100644 --- a/src/tools/tools_mc_util.c +++ b/src/tools/tools_mc_util.c @@ -25,6 +25,7 @@ #include "util/util.h" #include "tools/tools_util.h" #include "util/mmap_cache.h" +#include "sss_client/sss_cli.h" static errno_t sss_mc_set_recycled(int fd) { @@ -185,3 +186,57 @@ errno_t sss_memcache_clear_all(void) return EOK; } + +enum sss_tools_ent { + SSS_TOOLS_USER, + SSS_TOOLS_GROUP +}; + +static errno_t sss_mc_refresh_ent(const char *name, enum sss_tools_ent ent) +{ + enum sss_cli_command cmd; + struct sss_cli_req_data rd; + uint8_t *repbuf = NULL; + size_t replen; + enum nss_status nret; + errno_t ret; + + cmd = SSS_CLI_NULL; + switch (ent) { + case SSS_TOOLS_USER: + cmd = SSS_NSS_GETPWNAM; + break; + case SSS_TOOLS_GROUP: + cmd = SSS_NSS_GETGRNAM; + break; + } + + if (cmd == SSS_CLI_NULL) { + DEBUG(SSSDBG_OP_FAILURE, ("Unknown object %d to refresh\n", cmd)); + return EINVAL; + } + + rd.data = name; + rd.len = strlen(name) + 1; + + sss_nss_lock(); + nret = sss_nss_make_request(cmd, &rd, &repbuf, &replen, &ret); + sss_nss_unlock(); + + free(repbuf); + if (nret != NSS_STATUS_SUCCESS && nret != NSS_STATUS_NOTFOUND) { + return EIO; + } + + return EOK; +} + +errno_t sss_mc_refresh_user(const char *username) +{ + return sss_mc_refresh_ent(username, SSS_TOOLS_USER); +} + +errno_t sss_mc_refresh_group(const char *groupname) +{ + return sss_mc_refresh_ent(groupname, SSS_TOOLS_GROUP); +} |