Implement ldap_sasl_bind* functions.
authorHans Leidekker <hans@it.vu.nl>
Sun, 24 Jul 2005 17:10:46 +0000 (17:10 +0000)
committerAlexandre Julliard <julliard@winehq.org>
Sun, 24 Jul 2005 17:10:46 +0000 (17:10 +0000)
dlls/wldap32/bind.c
dlls/wldap32/winldap_private.h
dlls/wldap32/wldap32.spec

index d9ad8e6..4605ba3 100644 (file)
@@ -133,6 +133,148 @@ ULONG ldap_bind_sW( WLDAP32_LDAP *ld, PWCHAR dn, PWCHAR cred, ULONG method )
     return ret;
 }
 
+ULONG ldap_sasl_bindA( WLDAP32_LDAP *ld, const PCHAR dn,
+    const PCHAR mechanism, const BERVAL *cred, PLDAPControlA *serverctrls,
+    PLDAPControlA *clientctrls, int *message )
+{
+    ULONG ret = LDAP_NOT_SUPPORTED;
+#ifdef HAVE_LDAP
+    WCHAR *dnW, *mechanismW;
+    LDAPControlW **serverctrlsW, **clientctrlsW;
+
+    TRACE( "(%p, %s, %s, %p, %p, %p, %p)\n", ld, debugstr_a(dn),
+           debugstr_a(mechanism), cred, serverctrls, clientctrls, message );
+
+    dnW = strAtoW( dn );
+    if (!dnW) return LDAP_NO_MEMORY;
+
+    mechanismW = strAtoW( mechanism );
+    if (!mechanismW) return LDAP_NO_MEMORY;
+
+    serverctrlsW = controlarrayAtoW( serverctrls );
+    if (!serverctrlsW) return LDAP_NO_MEMORY;
+
+    clientctrlsW = controlarrayAtoW( clientctrls );
+    if (!clientctrlsW) return LDAP_NO_MEMORY;
+
+    ret = ldap_sasl_bindW( ld, dnW, mechanismW, cred, serverctrlsW, clientctrlsW, message );
+
+    strfreeW( dnW );
+    strfreeW( mechanismW );
+    controlarrayfreeW( serverctrlsW );
+    controlarrayfreeW( clientctrlsW );
+
+#endif
+    return ret;
+}
+
+ULONG ldap_sasl_bindW( WLDAP32_LDAP *ld, const PWCHAR dn,
+    const PWCHAR mechanism, const BERVAL *cred, PLDAPControlW *serverctrls,
+    PLDAPControlW *clientctrls, int *message )
+{
+    ULONG ret = LDAP_NOT_SUPPORTED;
+#ifdef HAVE_LDAP
+    char *dnU, *mechanismU;
+    LDAPControl **serverctrlsU, **clientctrlsU;
+
+    TRACE( "(%p, %s, %s, %p, %p, %p, %p)\n", ld, debugstr_w(dn),
+           debugstr_w(mechanism), cred, serverctrls, clientctrls, message );
+
+    dnU = strWtoU( dn );
+    if (!dnU) return LDAP_NO_MEMORY;
+
+    mechanismU = strWtoU( mechanism );
+    if (!mechanismU) return LDAP_NO_MEMORY;
+
+    serverctrlsU = controlarrayWtoU( serverctrls );
+    if (!serverctrlsU) return LDAP_NO_MEMORY;
+
+    clientctrlsU = controlarrayWtoU( clientctrls );
+    if (!clientctrlsU) return LDAP_NO_MEMORY;
+
+    ret = ldap_sasl_bind( ld, dnU, mechanismU, (struct berval *)cred,
+                          serverctrlsU, clientctrlsU, message );
+
+    strfreeU( dnU );
+    strfreeU( mechanismU );
+    controlarrayfreeU( serverctrlsU );
+    controlarrayfreeU( clientctrlsU );
+
+#endif
+    return ret;
+}
+
+ULONG ldap_sasl_bind_sA( WLDAP32_LDAP *ld, const PCHAR dn,
+    const PCHAR mechanism, const BERVAL *cred, PLDAPControlA *serverctrls,
+    PLDAPControlA *clientctrls, PBERVAL *serverdata )
+{
+    ULONG ret = LDAP_NOT_SUPPORTED;
+#ifdef HAVE_LDAP
+    WCHAR *dnW, *mechanismW;
+    LDAPControlW **serverctrlsW, **clientctrlsW;
+
+    TRACE( "(%p, %s, %s, %p, %p, %p, %p)\n", ld, debugstr_a(dn),
+           debugstr_a(mechanism), cred, serverctrls, clientctrls, serverdata );
+
+    dnW = strAtoW( dn );
+    if (!dnW) return LDAP_NO_MEMORY;
+
+    mechanismW = strAtoW( mechanism );
+    if (!mechanismW) return LDAP_NO_MEMORY;
+
+    serverctrlsW = controlarrayAtoW( serverctrls );
+    if (!serverctrlsW) return LDAP_NO_MEMORY;
+
+    clientctrlsW = controlarrayAtoW( clientctrls );
+    if (!clientctrlsW) return LDAP_NO_MEMORY;
+
+    ret = ldap_sasl_bind_sW( ld, dnW, mechanismW, cred, serverctrlsW, clientctrlsW, serverdata );
+
+    strfreeW( dnW );
+    strfreeW( mechanismW );
+    controlarrayfreeW( serverctrlsW );
+    controlarrayfreeW( clientctrlsW );
+
+#endif
+    return ret;
+}
+
+ULONG ldap_sasl_bind_sW( WLDAP32_LDAP *ld, const PWCHAR dn,
+    const PWCHAR mechanism, const BERVAL *cred, PLDAPControlW *serverctrls,
+    PLDAPControlW *clientctrls, PBERVAL *serverdata )
+{
+    ULONG ret = LDAP_NOT_SUPPORTED;
+#ifdef HAVE_LDAP
+    char *dnU, *mechanismU;
+    LDAPControl **serverctrlsU, **clientctrlsU;
+
+    TRACE( "(%p, %s, %s, %p, %p, %p, %p)\n", ld, debugstr_w(dn),
+           debugstr_w(mechanism), cred, serverctrls, clientctrls, serverdata );
+
+    dnU = strWtoU( dn );
+    if (!dnU) return LDAP_NO_MEMORY;
+
+    mechanismU = strWtoU( mechanism );
+    if (!mechanismU) return LDAP_NO_MEMORY;
+
+    serverctrlsU = controlarrayWtoU( serverctrls );
+    if (!serverctrlsU) return LDAP_NO_MEMORY;
+
+    clientctrlsU = controlarrayWtoU( clientctrls );
+    if (!clientctrlsU) return LDAP_NO_MEMORY;
+
+    ret = ldap_sasl_bind_s( ld, dnU, mechanismU, (struct berval *)cred,
+                            serverctrlsU, clientctrlsU, (struct berval **)serverdata );
+
+    strfreeU( dnU );
+    strfreeU( mechanismU );
+    controlarrayfreeU( serverctrlsU );
+    controlarrayfreeU( clientctrlsU );
+
+#endif
+    return ret;
+}
+
 ULONG ldap_simple_bindA( WLDAP32_LDAP *ld, PCHAR dn, PCHAR passwd )
 {
     ULONG ret = LDAP_NOT_SUPPORTED;
index 22ba779..16e14dd 100644 (file)
@@ -103,6 +103,10 @@ WLDAP32_LDAP *ldap_initA(const PCHAR,ULONG);
 WLDAP32_LDAP *ldap_initW(const PWCHAR,ULONG);
 WLDAP32_LDAP *ldap_openA(PCHAR,ULONG);
 WLDAP32_LDAP *ldap_openW(PWCHAR,ULONG);
+ULONG ldap_sasl_bindA(WLDAP32_LDAP*,const PCHAR,const PCHAR,const BERVAL*,PLDAPControlA*,PLDAPControlA*,int*);
+ULONG ldap_sasl_bindW(WLDAP32_LDAP*,const PWCHAR,const PWCHAR,const BERVAL*,PLDAPControlW*,PLDAPControlW*,int*);
+ULONG ldap_sasl_bind_sA(WLDAP32_LDAP*,const PCHAR,const PCHAR,const BERVAL*,PLDAPControlA*,PLDAPControlA*,PBERVAL*);
+ULONG ldap_sasl_bind_sW(WLDAP32_LDAP*,const PWCHAR,const PWCHAR,const BERVAL*,PLDAPControlW*,PLDAPControlW*,PBERVAL*);
 ULONG ldap_searchA(WLDAP32_LDAP*,PCHAR,ULONG,PCHAR,PCHAR[],ULONG);
 ULONG ldap_searchW(WLDAP32_LDAP*,PWCHAR,ULONG,PWCHAR,PWCHAR[],ULONG);
 ULONG ldap_search_sA(WLDAP32_LDAP*,PCHAR,ULONG,PCHAR,PCHAR[],ULONG,WLDAP32_LDAPMessage**);
index d674272..3baf714 100644 (file)
 @ cdecl ldap_open(str long) ldap_openA
 @ cdecl ldap_openA(str long)
 @ cdecl ldap_openW(wstr long)
+@ cdecl ldap_sasl_bindA(ptr str str ptr ptr ptr ptr)
+@ cdecl ldap_sasl_bindW(ptr wstr wstr ptr ptr ptr ptr)
+@ cdecl ldap_sasl_bind_sA(ptr str str ptr ptr ptr ptr)
+@ cdecl ldap_sasl_bind_sW(ptr wstr wstr ptr ptr ptr ptr)
 @ cdecl ldap_search(ptr str long str ptr long) ldap_searchA
 @ cdecl ldap_searchA(ptr str long str ptr long)
 @ cdecl ldap_searchW(ptr wstr long wstr ptr long)