Add ads_check_ou_dn().
authorGünther Deschner <gd@samba.org>
Fri, 28 Mar 2008 15:33:54 +0000 (16:33 +0100)
committerGünther Deschner <gd@samba.org>
Fri, 28 Mar 2008 15:43:59 +0000 (16:43 +0100)
Guenther
(This used to be commit 380e9d26db5341d10807ccbfb413d0f53d3ffc71)

source3/libads/ldap.c

index 00d36b7edcb98040fa3648e77753180f0c71fb5e..a9eff48b3ea40895788e2ba42dfb64e8a81e6e6d 100644 (file)
@@ -22,6 +22,7 @@
 */
 
 #include "includes.h"
+#include "lib/ldb/include/includes.h"
 
 #ifdef HAVE_LDAP
 
@@ -3551,4 +3552,50 @@ const char *ads_get_extended_right_name_by_guid(ADS_STRUCT *ads,
        
 }
 
+/**
+ * verify or build and verify an account ou
+ * @param mem_ctx Pointer to talloc context
+ * @param ads connection to ads server
+ * @param account_ou
+ * @return status of search
+ **/
+
+ADS_STATUS ads_check_ou_dn(TALLOC_CTX *mem_ctx,
+                          ADS_STRUCT *ads,
+                          const char *account_ou)
+{
+       struct ldb_dn *name_dn = NULL;
+       const char *name = NULL;
+       char *ou_string = NULL;
+
+       name_dn = ldb_dn_explode(mem_ctx, account_ou);
+       if (name_dn) {
+               return ADS_SUCCESS;
+       }
+
+       ou_string = ads_ou_string(ads, account_ou);
+       if (!ou_string) {
+               return ADS_ERROR_LDAP(LDAP_INVALID_DN_SYNTAX);
+       }
+
+       name = talloc_asprintf(mem_ctx, "%s,%s", ou_string,
+                              ads->config.bind_path);
+       SAFE_FREE(ou_string);
+       if (!name) {
+               return ADS_ERROR_LDAP(LDAP_NO_MEMORY);
+       }
+
+       name_dn = ldb_dn_explode(mem_ctx, name);
+       if (!name_dn) {
+               return ADS_ERROR_LDAP(LDAP_INVALID_DN_SYNTAX);
+       }
+
+       account_ou = talloc_strdup(mem_ctx, name);
+       if (!account_ou) {
+               return ADS_ERROR_LDAP(LDAP_NO_MEMORY);
+       }
+
+       return ADS_SUCCESS;
+}
+
 #endif