Dmitry Timoshkov : adsldp: Add support for IADsOpenDSObject::OpenDSObject(ADS_SECURE_AUTHENTICATION).

Alexandre Julliard julliard at winehq.org
Tue Mar 24 15:28:15 CDT 2020


Module: wine
Branch: master
Commit: 791791931c173e9b45aedee2bb56e9bcfe6d5375
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=791791931c173e9b45aedee2bb56e9bcfe6d5375

Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date:   Mon Mar 23 21:14:33 2020 +0800

adsldp: Add support for IADsOpenDSObject::OpenDSObject(ADS_SECURE_AUTHENTICATION).

Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/adsldp/adsldp.c | 23 +++++++++++++++++++----
 include/winldap.h    | 12 ++++++++++++
 2 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/dlls/adsldp/adsldp.c b/dlls/adsldp/adsldp.c
index bc4e9780b0..b60d164515 100644
--- a/dlls/adsldp/adsldp.c
+++ b/dlls/adsldp/adsldp.c
@@ -27,6 +27,7 @@
 #include "initguid.h"
 #include "objbase.h"
 #include "rpcproxy.h"
+#include "rpc.h"
 #include "iads.h"
 #include "adserr.h"
 #define SECURITY_WIN32
@@ -777,10 +778,24 @@ static HRESULT WINAPI openobj_OpenDSObject(IADsOpenDSObject *iface, BSTR path, B
 
         if (flags & ADS_SECURE_AUTHENTICATION)
         {
-            FIXME("ADS_SECURE_AUTHENTICATION is not supported\n");
-            hr = ERROR_DS_AUTH_METHOD_NOT_SUPPORTED;
-            ldap_unbind(ld);
-            goto fail;
+            SEC_WINNT_AUTH_IDENTITY_W id;
+
+            id.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE;
+            id.Domain = (unsigned short *)host;
+            id.DomainLength = wcslen(host);
+            id.User = (unsigned short *)user;
+            id.UserLength = user ? wcslen(user) : 0;
+            id.Password = (unsigned short *)password;
+            id.PasswordLength = password ? wcslen(password) : 0;
+
+            err = ldap_bind_sW(ld, NULL, (WCHAR *)&id, LDAP_AUTH_NEGOTIATE);
+            if (err != LDAP_SUCCESS)
+            {
+                TRACE("ldap_bind_sW error %#x\n", err);
+                hr = HRESULT_FROM_WIN32(map_ldap_error(err));
+                ldap_unbind(ld);
+                goto fail;
+            }
         }
         else
         {
diff --git a/include/winldap.h b/include/winldap.h
index e5c1faa3c1..bd5acab767 100644
--- a/include/winldap.h
+++ b/include/winldap.h
@@ -184,6 +184,18 @@ typedef struct berelement
 #define LDAP_RES_EXTENDED       0x78
 #define LDAP_RES_ANY            (-1)
 
+#define LDAP_AUTH_SIMPLE        0x80
+#define LDAP_AUTH_SASL          0x83
+#define LDAP_AUTH_OTHERKIND     0x86
+
+#define LDAP_AUTH_EXTERNAL      (LDAP_AUTH_OTHERKIND | 0x0020)
+#define LDAP_AUTH_SICILY        (LDAP_AUTH_OTHERKIND | 0x0200)
+#define LDAP_AUTH_NEGOTIATE     (LDAP_AUTH_OTHERKIND | 0x0400)
+#define LDAP_AUTH_MSN           (LDAP_AUTH_OTHERKIND | 0x0800)
+#define LDAP_AUTH_NTLM          (LDAP_AUTH_OTHERKIND | 0x1000)
+#define LDAP_AUTH_DPA           (LDAP_AUTH_OTHERKIND | 0x2000)
+#define LDAP_AUTH_DIGEST        (LDAP_AUTH_OTHERKIND | 0x4000)
+
 typedef struct ldap
 {
     struct




More information about the wine-cvs mailing list