convert-secrets_fetch_domain_sid-to-OD   [plain text]


Index: samba/source/passdb/secrets.c
===================================================================
--- samba/source/passdb/secrets.c.orig
+++ samba/source/passdb/secrets.c
@@ -24,6 +24,7 @@
    such as the local SID and machine trust password */
 
 #include "includes.h"
+#include "opendirectory.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_PASSDB
@@ -140,21 +141,31 @@ BOOL secrets_fetch_domain_sid(const char
 	DOM_SID *dyn_sid;
 	fstring key;
 	size_t size = 0;
+	tDirStatus status;
 
-	slprintf(key, sizeof(key)-1, "%s/%s", SECRETS_DOMAIN_SID, domain);
-	strupper_m(key);
-	dyn_sid = (DOM_SID *)secrets_fetch(key, &size);
-
-	if (dyn_sid == NULL)
-		return False;
-
-	if (size != sizeof(DOM_SID)) { 
+	if (lp_opendirectory()) {
+		status = opendirectory_query_domain_sid(NULL,
+			domain, sid);
+		LOG_DS_ERROR(DS_TRACE_ERRORS, status,
+			"secrets_fetch_domain_sid:opendirectory_query_domain_sid");
+		if (eDSNoErr != status)
+			return False;
+	} else {
+		slprintf(key, sizeof(key)-1, "%s/%s", SECRETS_DOMAIN_SID, domain);
+		strupper_m(key);
+		dyn_sid = (DOM_SID *)secrets_fetch(key, &size);
+
+		if (dyn_sid == NULL)
+			return False;
+
+		if (size != sizeof(DOM_SID)) {
+			SAFE_FREE(dyn_sid);
+			return False;
+		}
+
+		*sid = *dyn_sid;
 		SAFE_FREE(dyn_sid);
-		return False;
 	}
-
-	*sid = *dyn_sid;
-	SAFE_FREE(dyn_sid);
 	return True;
 }