internal override async Task <IntPtr> BindSimpleAsync(SafeHandle _ld, string userDn, string password) { return(await Task.Factory.StartNew(() => { var berval = new Native.berval { bv_len = password.Length, bv_val = Marshal.StringToHGlobalAnsi(password) }; var ptr = Marshal.AllocHGlobal(Marshal.SizeOf(berval)); Marshal.StructureToPtr(berval, ptr, false); var msgidp = 0; var result = IntPtr.Zero; NativeMethodsOsx.ldap_sasl_bind(_ld, userDn, null, ptr, IntPtr.Zero, IntPtr.Zero, ref msgidp); if (msgidp == -1) { throw new LdapException($"{nameof(BindSimpleAsync)} failed. {nameof(NativeMethodsOsx.ldap_sasl_bind)} returns wrong or empty result", nameof(NativeMethodsOsx.ldap_sasl_bind), 1); } var rc = NativeMethodsOsx.ldap_result(_ld, msgidp, 0, IntPtr.Zero, ref result); if (rc == Native.LdapResultType.LDAP_ERROR || rc == Native.LdapResultType.LDAP_TIMEOUT) { ThrowIfError((int)rc, nameof(NativeMethodsOsx.ldap_sasl_bind)); } return result; }).ConfigureAwait(false)); }