summaryrefslogtreecommitdiffstats
path: root/src/db
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2013-10-22 13:50:51 +0200
committerJakub Hrozek <jhrozek@redhat.com>2013-10-25 19:57:09 +0200
commit0e12686d5ae015b760b9878f64d07c3536c9d466 (patch)
tree1600f07d1f6d1074e52eb113c2d06c45731e6259 /src/db
parent7534f145c7b376dd5320d7f73022923f087d49a9 (diff)
downloadsssd-0e12686d5ae015b760b9878f64d07c3536c9d466.tar.gz
sssd-0e12686d5ae015b760b9878f64d07c3536c9d466.tar.xz
sssd-0e12686d5ae015b760b9878f64d07c3536c9d466.zip
SYSDB: Add sysdb_delete_by_sid
Diffstat (limited to 'src/db')
-rw-r--r--src/db/sysdb.h4
-rw-r--r--src/db/sysdb_ops.c49
2 files changed, 53 insertions, 0 deletions
diff --git a/src/db/sysdb.h b/src/db/sysdb.h
index 2f73873f0..4d5ef0b47 100644
--- a/src/db/sysdb.h
+++ b/src/db/sysdb.h
@@ -812,6 +812,10 @@ int sysdb_delete_netgroup(struct sysdb_ctx *sysdb,
struct sss_domain_info *domain,
const char *name);
+int sysdb_delete_by_sid(struct sysdb_ctx *sysdb,
+ struct sss_domain_info *domain,
+ const char *sid_str);
+
errno_t sysdb_attrs_to_list(TALLOC_CTX *mem_ctx,
struct sysdb_attrs **attrs,
int attr_count,
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 ============ */