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;
}