summaryrefslogtreecommitdiff
path: root/src/db
diff options
context:
space:
mode:
Diffstat (limited to 'src/db')
-rw-r--r--src/db/sysdb.c29
-rw-r--r--src/db/sysdb.h4
2 files changed, 33 insertions, 0 deletions
diff --git a/src/db/sysdb.c b/src/db/sysdb.c
index 034e5da0..8ca4c17f 100644
--- a/src/db/sysdb.c
+++ b/src/db/sysdb.c
@@ -1765,3 +1765,32 @@ done:
talloc_free(tmp_ctx);
return ret;
}
+
+errno_t sysdb_msg2attrs(TALLOC_CTX *mem_ctx, size_t count,
+ struct ldb_message **msgs,
+ struct sysdb_attrs ***attrs)
+{
+ int i;
+ struct sysdb_attrs **a;
+
+ a = talloc_array(mem_ctx, struct sysdb_attrs *, count);
+ if (a == NULL) {
+ DEBUG(1, ("talloc_array failed.\n"));
+ return ENOMEM;
+ }
+
+ for (i = 0; i < count; i++) {
+ a[i] = talloc(a, struct sysdb_attrs);
+ if (a[i] == NULL) {
+ DEBUG(1, ("talloc_array failed.\n"));
+ talloc_free(a);
+ return ENOMEM;
+ }
+ a[i]->num = msgs[i]->num_elements;
+ a[i]->a = talloc_steal(a[i], msgs[i]->elements);
+ }
+
+ *attrs = a;
+
+ return EOK;
+}
diff --git a/src/db/sysdb.h b/src/db/sysdb.h
index 6094a4aa..3d2a7682 100644
--- a/src/db/sysdb.h
+++ b/src/db/sysdb.h
@@ -254,6 +254,10 @@ errno_t sysdb_get_real_name(TALLOC_CTX *mem_ctx,
const char *name,
const char **_cname);
+errno_t sysdb_msg2attrs(TALLOC_CTX *mem_ctx, size_t count,
+ struct ldb_message **msgs,
+ struct sysdb_attrs ***attrs);
+
/* convert an ldb error into an errno error */
int sysdb_error_to_errno(int ldberr);