Как я могу исправить ошибку операций фильтра LDAP в GoLang?

Итак, я новичок в GoLang и пытаюсь создать фильтр LDAP. Однако я продолжаю получать следующую ошибку:

LDAP Result Code 1 "Operations Error": 000020D6: SvcErr: DSID-031007E5, problem 5012 (DIR_ERROR), data 0

Я прочитал здесь (Ошибки LDAP) что "Ошибка операций" происходит, когда либо не все необходимые вызовы были сделаны, либо порядок выполнения вызовов неправильный.

Честно говоря, я не уверен, что я могу упустить или что я делаю неправильно.

Мой код следующий

 import (
    "crypto/tls"
    "fmt"
    "github.com/go-ldap/ldap/v3"
    "log"
)


func ApiCaller(){
    // The username and password we want to check
    username := "username"
    password := "password"

    //Establishing connection to the LDAP server
    l, err := ldap.Dial("tcp", "exampleURL.com:389")
    if err != nil {
        log.Fatal(err)
    }

    // Closing connection in case of error
    defer l.Close()

    // Reconnect with TLS
    err = l.StartTLS(&tls.Config{InsecureSkipVerify: true})
    if err != nil {
        log.Fatal(err)
    }

    // Bind as the user to verify their password
    err = l.Bind(username, password)
    if err != nil {
        log.Fatal(err)
    }
    // Setting up the search criterias with filter
    searchRequest := ldap.NewSearchRequest(
        "OU=OUg_Applications",
        ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
        fmt.Sprintf("(&(OU=OUg_Applications))"),
        []string{""},
        nil,
    )

    // Performing search in the LDAP Server
    sr, err := l.Search(searchRequest)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(sr.Entries)
}

person Stack Overflow    schedule 05.02.2020    source источник
comment
Ваше начальное DN выглядит неправильно. Первый параметр поискового вызова. Это должно быть DN расположения в DIT. Вам не нужен & в фильтре, так как у вас есть только один термин, и его удаление приведет к появлению лишних скобок.   -  person user207421    schedule 06.02.2020
comment
Убедитесь, что ваш запрос верен, используя инструменты командной строки, например. ldapsearch -D username -w password -b OU=OUg_Applications '(&(OU=OUg_Applications))' - перед попыткой скомпилированного кода. Как упомянул @user207421, базовое DN выглядит неправильно — оно должно заканчиваться на o=example.com и т. д. Также, возможно, закомментируйте раздел StartTLS, пока не получите базовое соединение.   -  person colm.anseo    schedule 06.02.2020
comment
Спасибо @colminator и пользователю 207421. Мой базовый DN был выключен. Вместо этого было DC=example,DC=com. Вы, ребята, любители жизни!   -  person Stack Overflow    schedule 07.02.2020
comment
@ user207421 что такое DIT?   -  person Stack Overflow    schedule 07.02.2020
comment
DIT = дерево информации каталога   -  person T-Heron    schedule 09.02.2020
comment
Вы должны были попросить @user207421 превратить свой комментарий в ответ и получить за это должное признание - это то, что я бы сделал. Подумайте о сообществе здесь. Вместо этого вы взяли его комментарий (который дал ответ) и превратили его в самостоятельный ответ, а затем отметили его самостоятельно. Я имею в виду, я рад, что вы подтвердили решение. Не поймите меня неправильно. Но очень жаль, что user207421 никогда не получит должного признания за это, ИМХО.   -  person T-Heron    schedule 09.02.2020
comment
@user207421 user207421 Мне жаль, что я не сделал то, что подчеркнул T-Heron. Я не имел в виду никакого вреда. Я просто не думал об этом. Если хотите, продолжайте и поставьте ответ, и я отмечу его. Снова простите.   -  person Stack Overflow    schedule 10.02.2020


Ответы (1)


Комментарии к вопросу помогли мне разобраться. Мой базовый DN был выключен. Предполагалось, что это будет «DC=example,DC=com», а не «OU=OUg_Applications».

person Stack Overflow    schedule 06.02.2020