示例#1
0
        public int Ldap_Search_Ext_S(
            string basedn,
            int scope,
            string filter,
            string[] attrs,
            int attrsonly,
            //LDAPControl[] ServerControls,
            IntPtr[] ServerControls,
            IntPtr[] ClientControls,
            LdapTimeVal timeout,
            int SizeLimit,
            out LdapMessage ldapMessage
            )
        {
            IntPtr umldapMessage = new IntPtr();
            // IntPtr[] umServerControls = null;
            //IntPtr umClientControls = IntPtr.Zero;
            IntPtr umtimeout = IntPtr.Zero;

            /*  if (ServerControls != null && ServerControls.Length > 0)
              {
                  umServerControls = new IntPtr[ServerControls.Length];
                  for (int i = 0; i < ServerControls.Length; i++)
                  {
                      umServerControls[i] = ServerControls[i].ConvertToUM();
                  }
              }*/

            //if (ClientControls != null && ClientControls.Length > 0)
            //{
            //    umClientControls = new IntPtr[ClientControls.Length];
            //    for (int i = 0; i < ClientControls.Length; i++)
            //    {
            //        umClientControls[i] = ClientControls[i].ConvertToUM();
            //    }
            //}

            if (timeout != null) umtimeout = timeout.ConvertToUM();

            int ret = -1;
            ldapMessage = null;

            Monitor.Enter(Ldap_ApiCallSync);
            try
            {
                Logger.Log(String.Format("Calling Ldap_Search_Ext_S(basedn={0}, scope={1}, filter={2})",
                      basedn, scope, filter), Logger.ldapLogLevel);

                /* int ret = LdapApi.ldap_search_ext_s(
                           _ld, basedn, scope, filter, attrs, attrsonly,
               umServerControls, umClientControls, umtimeout, SizeLimit, out umldapMessage);*/

                unsafe
                {
                    ret = Ldap_Rebind_S();
                    if (ret != 0)
                    {
                        Logger.Log(ErrorCodes.LDAPString(ret), Logger.ldapLogLevel);
                        ldapMessage = null;
                        return ret;
                    }

                    ret = LdapAPI.ldap_search_ext_s(_ld,
                                                    basedn,
                                                    scope,
                                                    filter,
                                                    attrs,
                                                    0,
                                                    ServerControls,
                                                    ClientControls,
                                                    umtimeout,
                                                    SizeLimit,
                                                    out umldapMessage);
                }

                Logger.Log(String.Format("LdapHandle.Ldap_Search_Ext_S: ret={0}",
                ret), Logger.ldapLogLevel);

                if (ret != 0)
                {
                    Logger.Log(ErrorCodes.LDAPString(ret), Logger.ldapLogLevel);
                }

                if (umldapMessage == IntPtr.Zero)
                {
                    ldapMessage = null;
                    return ret;
                }
                ldapMessage = new LdapMessage(this, umldapMessage);
                return ret;
            }
            catch (Exception ex)
            {
                Logger.LogException("LdapHandle.Ldap_Search_Ext_S", ex);
                return ret;
            }
            finally
            {
                Monitor.Exit(Ldap_ApiCallSync);
            }
        }
示例#2
0
        public int Ldap_Search_ST(
            string basedn,
            int scope,
            string filter,
            string[] attrs,
            int attrsonly,
            LdapTimeVal tv,
            out LdapMessage ldapMessage
            )
        {
            DateTime beforeSearch = DateTime.Now;
            DateTime afterSearch = DateTime.Now;
            int ret = -1;
            ldapMessage = null;

            Monitor.Enter(Ldap_ApiCallSync);
            try
            {
                unsafe
                {
                    IntPtr umldapMessage = new IntPtr();
                    IntPtr timeout = tv.ConvertToUM();
                    Logger.Log(String.Format("Calling Ldap_Search_ST(basedn={0}, scope={1}, filter={2})",
                                              basedn, scope, filter),
                                              Logger.ldapLogLevel);

                    ret = Ldap_Rebind_S();
                    if (ret != 0)
                    {
                        Logger.Log(ErrorCodes.LDAPString(ret), Logger.ldapLogLevel);
                        ldapMessage = null;
                        return ret;
                    }

                    ret = LdapAPI.ldap_search_st(_ld, basedn, scope, filter, attrs, attrsonly, timeout, out umldapMessage);

                    if (ret != 0)
                    {
                        Logger.Log(ErrorCodes.LDAPString(ret), Logger.ldapLogLevel);
                        ldapMessage = null;
                        return ret;
                    }

                    if (umldapMessage == IntPtr.Zero)
                    {
                        ldapMessage = null;
                        return ret;
                    }
                    ldapMessage = new LdapMessage(this, umldapMessage);

                    return ret;
                }
            }
            catch (Exception ex)
            {
                Logger.LogException("LdapHandle.Ldap_Search_ST", ex);
                return ret;
            }
            finally
            {
                afterSearch = DateTime.Now;
                Logger.Log(String.Format("Ldap_Search_ST complete.  Time elapsed: {0}",
                afterSearch - beforeSearch), Logger.ldapLogLevel);

                Monitor.Exit(Ldap_ApiCallSync);
            }
        }