Не удалось войти в phpldapadmin centos 7- [duplicate]

Члены класса:

Для деструктора pure virtual требуется реализация.

Объявление деструктора по-прежнему требует определения его (в отличие от обычной функции):

struct X
{
    virtual ~X() = 0;
};
struct Y : X
{
    ~Y() {}
};
int main()
{
    Y y;
}
//X::~X(){} //uncomment this line for successful definition

Это происходит потому, что деструкторы базового класса вызывается, когда объект уничтожается неявно, поэтому требуется определение.

virtual методы должны быть реализованы или определены как чистые.

Это похоже на методы не virtual без определения, с добавлением аргументов, которые генерирует чистая декларация dummy vtable, и вы можете получить ошибку компоновщика без использования функции:

struct X
{
    virtual void foo();
};
struct Y : X
{
   void foo() {}
};
int main()
{
   Y y; //linker error although there was no call to X::foo
}

Чтобы это сработало, объявите X::foo() чистым:

struct X
{
    virtual void foo() = 0;
};

Non- virtual

Некоторые члены должны быть определены, даже если они явно не используются:

struct A
{ 
    ~A();
};

Следующие ошибки приведут к ошибке:

A a;      //destructor undefined

Реализация может быть встроенной в самом определении класса:

struct A
{ 
    ~A() {}
};

или снаружи:

A::~A() {}

Если реализация вне определения класса, но в заголовке, методы должны быть отмечены как inline, чтобы предотвратить множественное определение.

Все используемые методы-члены должны быть определены, если они используются.

Общей ошибкой является отказ от квалификации имени:

struct A
{
   void foo();
};

void foo() {}

int main()
{
   A a;
   a.foo();
}

Определение должно быть

void A::foo() {}

static. Члены данных должны быть определены вне класса в единственная единица перевода:

struct X
{
    static int x;
};
int main()
{
    int x = X::x;
}
//int X::x; //uncomment this line to define X::x

Инициализатор может быть предоставлен для элемента данных static const типа интеграла или перечисления в определении класса; однако odr-использование этого элемента по-прежнему потребует определения области пространства имен, как описано выше. C ++ 11 позволяет инициализировать внутри класса для всех членов static const данных.

0
задан user2241859 11 December 2013 в 21:49
поделиться

3 ответа

@ Annamalai.Somasundaram,

DN должно передаваться как cn = test, ou = Пользователи, dc = ci, dc = mycompany, dc = com

правильное написание можно найти на конкретном сервере LDAP

0
ответ дан Kakash1hatake 25 August 2018 в 22:35
поделиться

Кажется, что функция ldap_bind требует DN, а не RDN, независимо от того, что говорит документ. Если это так, то:

  • Номер 1. {$user}@{$domain} не является правильно отформатированным DN, следовательно: Invalid DN syntax
  • Номер 2: test не правильно отформатированное DN, следовательно: Invalid DN syntax

Информацию о строчном представлении форматирования DN см. в RFC4514

проверьте с помощью известного хорошего инструмента

Насколько я могу судить, номер 3 является единственным правильным одним из четырех предоставленных. Сервер каталогов указал в ответе BIND, что он не смог проверить, что предоставленный пароль testpass соответствует паролю, который хранится в его базе данных. В этом случае я рекомендую проверять пароль с помощью известного хорошего инструмента, такого как ldapsearch.

ldapsearch -h hostname -p port              \
    -D 'uid=test,dc=ci,dc=mycompany,dc=com' \
    -w 'testpass' -s base '(&)' 1.1

Этот ldapsearch BIND в каталог как «uid = test, dc = ci, dc = mycompany , dc = com ', используя пароль testpass и извлекает DN записи uid=test. Если это не удается с ошибкой «недопустимые учетные данные», то есть следующие возможности:

  • testpass неверный пароль
  • некоторые серверы каталогов могут быть настроены для установки выводит код на «недопустимые учетные данные» независимо от истины. Причиной этого является удержание информации от злоумышленника
  • , запись uid=test не существует. Вышеупомянутый балл указывает, что это приведет к «недопустимым учетным данным». Нет смысла сообщать злоумышленнику, что запись не существует, что обеспечило бы злоумышленнику дополнительную информацию (у него есть меньше DN, чтобы попробовать).

жаргон и LDAP-talk

В интересах использования правильного жаргона:

  • $ldaprdn не является RDN, это DN. RDN являются компонентами DN

см. Также

4
ответ дан Terry Gardner 25 August 2018 в 22:35
поделиться

Я нахожу проблему: $ ldaprdn = 'uid = test, dc = ci, dc = mycompany, dc = com' не так же, как на сервере LDAP, после того, как он сработает хорошо.

0
ответ дан user2241859 25 August 2018 в 22:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: