diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2013-10-22 13:50:51 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2013-10-25 19:55:07 +0200 |
commit | 8b64ca35eb73667a589067788a6f9fb1f7d281c1 (patch) | |
tree | 516a78d9f0fe5742de2a9f346d4daa9f9d264156 /src/db/sysdb_ops.c | |
parent | d67a80baf0bdc888297d3587c98f8a12d4827ebc (diff) | |
download | sssd-8b64ca35eb73667a589067788a6f9fb1f7d281c1.tar.gz sssd-8b64ca35eb73667a589067788a6f9fb1f7d281c1.tar.xz sssd-8b64ca35eb73667a589067788a6f9fb1f7d281c1.zip |
SYSDB: Add sysdb_delete_by_sid
Diffstat (limited to 'src/db/sysdb_ops.c')
-rw-r--r-- | src/db/sysdb_ops.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/db/sysdb_ops.c b/src/db/sysdb_ops.c index ca23fadbf..094c27b7f 100644 --- a/src/db/sysdb_ops.c +++ b/src/db/sysdb_ops.c @@ -2841,6 +2841,55 @@ done: return ret; } +int sysdb_delete_by_sid(struct sysdb_ctx *sysdb, + struct sss_domain_info *domain, + const char *sid_str) +{ + TALLOC_CTX *tmp_ctx; + struct ldb_result *res; + int ret; + + if (!sid_str) return EINVAL; + + tmp_ctx = talloc_new(NULL); + if (!tmp_ctx) { + return ENOMEM; + } + + ret = sysdb_search_object_by_sid(tmp_ctx, sysdb, domain, + sid_str, NULL, &res); + if (ret != EOK) { + DEBUG(SSSDBG_OP_FAILURE, ("search by sid failed: %d (%s)\n", + ret, strerror(ret))); + goto done; + } + + if (res->count > 1) { + DEBUG(SSSDBG_FATAL_FAILURE, ("getbysid call returned more than one " \ + "result !?!\n")); + ret = EIO; + goto done; + } + + if (res->count == 0) { + /* No existing entry. Just quit. */ + ret = EOK; + goto done; + } + + ret = sysdb_delete_entry(sysdb, res->msgs[0]->dn, false); + if (ret != EOK) { + goto done; + } + +done: + if (ret != EOK) { + DEBUG(SSSDBG_OP_FAILURE, ("Error: %d (%s)\n", ret, strerror(ret))); + } + talloc_free(tmp_ctx); + return ret; +} + /* ========= Authentication against cached password ============ */ |