summaryrefslogtreecommitdiff
path: root/source4/rpc_server/samr/samdb.c
diff options
context:
space:
mode:
Diffstat (limited to 'source4/rpc_server/samr/samdb.c')
-rw-r--r--source4/rpc_server/samr/samdb.c50
1 files changed, 49 insertions, 1 deletions
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
@@ -424,6 +451,16 @@ int samdb_msg_add_string(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *msg
}
/*
+ 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
*/
int samdb_msg_set_string(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *msg,
@@ -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);
+}