From c1d525a90f06a9414d0788857b271b80625a5858 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Wed, 29 Sep 2010 22:15:39 +0200 Subject: sysdb interface for adding fake users --- src/db/sysdb_ops.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) (limited to 'src/db/sysdb_ops.c') diff --git a/src/db/sysdb_ops.c b/src/db/sysdb_ops.c index f8e1fbd5..7ae22f7d 100644 --- a/src/db/sysdb_ops.c +++ b/src/db/sysdb_ops.c @@ -916,6 +916,67 @@ done: return ret; } +int sysdb_add_fake_user(struct sysdb_ctx *ctx, + struct sss_domain_info *domain, + const char *name) +{ + TALLOC_CTX *tmpctx; + struct ldb_message *msg; + time_t now; + int ret; + + tmpctx = talloc_new(NULL); + if (!tmpctx) { + return ENOMEM; + } + + msg = ldb_msg_new(tmpctx); + if (!msg) { + ERROR_OUT(ret, ENOMEM, done); + } + + /* user dn */ + msg->dn = sysdb_user_dn(ctx, msg, domain->name, name); + if (!msg->dn) { + ERROR_OUT(ret, ENOMEM, done); + } + + ret = add_string(msg, LDB_FLAG_MOD_ADD, SYSDB_OBJECTCLASS, SYSDB_USER_CLASS); + if (ret) goto done; + + ret = add_string(msg, LDB_FLAG_MOD_ADD, SYSDB_NAME, name); + if (ret) goto done; + + now = time(NULL); + + ret = add_ulong(msg, LDB_FLAG_MOD_ADD, SYSDB_CREATE_TIME, + (unsigned long) now); + if (ret) goto done; + + /* set last login so that the fake entry does not get cleaned up + * immediately */ + ret = add_ulong(msg, LDB_FLAG_MOD_ADD, SYSDB_LAST_LOGIN, + (unsigned long) now); + if (ret) return ret; + + ret = add_ulong(msg, LDB_FLAG_MOD_ADD, SYSDB_LAST_UPDATE, + (unsigned long) now); + if (ret) goto done; + + ret = add_ulong(msg, LDB_FLAG_MOD_ADD, SYSDB_CACHE_EXPIRE, + (unsigned long) now-1); + if (ret) goto done; + + ret = ldb_add(ctx->ldb, msg); + ret = sysdb_error_to_errno(ret); + +done: + if (ret != EOK) { + DEBUG(6, ("Error: %d (%s)\n", ret, strerror(ret))); + } + talloc_zfree(tmpctx); + return ret; +} /* =Add-Basic-Group-NO-CHECKS============================================= */ -- cgit