From 35ffc464541366ba1da0a332afae203b68512010 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 8 May 2004 14:42:45 +0000 Subject: r587: added server code for samr_EnumDomainUsers, and started adding samr_SetUserInfo and samr_QueryUserInfo (This used to be commit e0db9659a85b59e52fbe033a94b411d6c64d9f9c) --- source4/rpc_server/samr/samdb.c | 50 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) (limited to 'source4/rpc_server/samr/samdb.c') diff --git a/source4/rpc_server/samr/samdb.c b/source4/rpc_server/samr/samdb.c index f382dcd136..fc82303f13 100644 --- a/source4/rpc_server/samr/samdb.c +++ b/source4/rpc_server/samr/samdb.c @@ -262,11 +262,38 @@ uint_t samdb_result_uint(struct ldb_message *msg, const char *attr, uint_t defau /* pull a string from a result set. */ -const char *samdb_result_string(struct ldb_message *msg, const char *attr, char *default_value) +const char *samdb_result_string(struct ldb_message *msg, const char *attr, + const char *default_value) { return ldb_msg_find_string(msg, attr, default_value); } +/* + pull a rid from a objectSid in a result set. +*/ +uint32 samdb_result_rid_from_sid(TALLOC_CTX *mem_ctx, struct ldb_message *msg, + const char *attr, uint32 default_value) +{ + struct dom_sid *sid; + const char *sidstr = ldb_msg_find_string(msg, attr, NULL); + if (!sidstr) return default_value; + + sid = dom_sid_parse_talloc(mem_ctx, sidstr); + if (!sid) return default_value; + + return sid->sub_auths[sid->num_auths-1]; +} + +/* + pull a rid from a objectSid in a result set. +*/ +NTTIME samdb_result_nttime(struct ldb_message *msg, const char *attr, + const char *default_value) +{ + const char *str = ldb_msg_find_string(msg, attr, default_value); + return nttime_from_string(str); +} + /* copy from a template record to a message @@ -423,6 +450,16 @@ int samdb_msg_add_string(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *msg return ldb_msg_add_string(sam_ctx->ldb, msg, a, s); } +/* + add a uint_t element to a message +*/ +int samdb_msg_add_uint(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *msg, + const char *attr_name, uint_t v) +{ + const char *s = talloc_asprintf(mem_ctx, "%u", v); + return samdb_msg_add_string(ctx, mem_ctx, msg, attr_name, s); +} + /* set a string element in a message */ @@ -475,3 +512,14 @@ int samdb_delete(void *ctx, TALLOC_CTX *mem_ctx, const char *dn) ldb_set_alloc(sam_ctx->ldb, samdb_alloc, mem_ctx); return ldb_delete(sam_ctx->ldb, dn); } + +/* + modify a record +*/ +int samdb_modify(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *msg) +{ + struct samdb_context *sam_ctx = ctx; + + ldb_set_alloc(sam_ctx->ldb, samdb_alloc, mem_ctx); + return ldb_modify(sam_ctx->ldb, msg); +} -- cgit