summaryrefslogtreecommitdiffstats
path: root/server/db/sysdb.c
diff options
context:
space:
mode:
authorSimo Sorce <ssorce@redhat.com>2009-11-30 15:40:36 -0500
committerStephen Gallagher <sgallagh@redhat.com>2009-12-07 10:18:53 -0500
commit545432a63359fbba14a344e6f38279541d0004c2 (patch)
tree5731be50bcf888d68b1313e3866f6f756ba7c19a /server/db/sysdb.c
parente4be4c446da6dc15f2778c93f22611c93b981e4d (diff)
downloadsssd-545432a63359fbba14a344e6f38279541d0004c2.tar.gz
sssd-545432a63359fbba14a344e6f38279541d0004c2.tar.xz
sssd-545432a63359fbba14a344e6f38279541d0004c2.zip
Make strdn build functions more available
Diffstat (limited to 'server/db/sysdb.c')
-rw-r--r--server/db/sysdb.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/server/db/sysdb.c b/server/db/sysdb.c
index 5a274fb14..8ff96566d 100644
--- a/server/db/sysdb.c
+++ b/server/db/sysdb.c
@@ -254,6 +254,54 @@ int sysdb_attrs_add_time_t(struct sysdb_attrs *attrs,
return ret;
}
+static char *build_dom_dn_str_escape(TALLOC_CTX *memctx, const char *template,
+ const char *domain, const char *name)
+{
+ char *ret;
+ int l;
+
+ l = strcspn(name, ",=\n+<>#;\\\"");
+ if (name[l] != '\0') {
+ struct ldb_val v;
+ char *tmp;
+
+ v.data = discard_const_p(uint8_t, name);
+ v.length = strlen(name);
+
+ tmp = ldb_dn_escape_value(memctx, v);
+ if (!tmp) {
+ return NULL;
+ }
+
+ ret = talloc_asprintf(memctx, template, tmp, domain);
+ talloc_zfree(tmp);
+ if (!ret) {
+ return NULL;
+ }
+
+ return ret;
+ }
+
+ ret = talloc_asprintf(memctx, template, name, domain);
+ if (!ret) {
+ return NULL;
+ }
+
+ return ret;
+}
+
+char *sysdb_user_strdn(TALLOC_CTX *memctx,
+ const char *domain, const char *name)
+{
+ return build_dom_dn_str_escape(memctx, SYSDB_TMPL_USER, domain, name);
+}
+
+char *sysdb_group_strdn(TALLOC_CTX *memctx,
+ const char *domain, const char *name)
+{
+ return build_dom_dn_str_escape(memctx, SYSDB_TMPL_GROUP, domain, name);
+}
+
/* TODO: make a more complete and precise mapping */
int sysdb_error_to_errno(int ldberr)
{