diff --git a/ldap.go b/ldap.go index e5e3ba7..0eefe8b 100644 --- a/ldap.go +++ b/ldap.go @@ -3,15 +3,36 @@ package main import ( "crypto/tls" "fmt" + "strconv" "strings" "github.com/go-ldap/ldap/v3" ) func fetchDataFromLDAP() ([]Person, error) { - l, err := ldap.DialTLS("tcp", ldapConfig.Server+":"+ldapConfig.Port, &tls.Config{InsecureSkipVerify: true}) + var l *ldap.Conn + var err error + + // Port überprüfen und entsprechende Verbindung herstellen + port, err := strconv.Atoi(ldapConfig.Port) if err != nil { - return nil, fmt.Errorf("failed to connect to LDAP server: %v", err) + return nil, fmt.Errorf("ungültiger Port: %v", err) + } + + if port == 636 { + // SSL/TLS-Verbindung für Port 636 + l, err = ldap.DialTLS("tcp", ldapConfig.Server+":"+ldapConfig.Port, &tls.Config{InsecureSkipVerify: true}) + if err != nil { + return nil, fmt.Errorf("failed to connect to LDAP server (TLS): %v", err) + } + } else if port == 389 { + // Unverschlüsselte Verbindung für Port 389 + l, err = ldap.Dial("tcp", ldapConfig.Server+":"+ldapConfig.Port) + if err != nil { + return nil, fmt.Errorf("failed to connect to LDAP server: %v", err) + } + } else { + return nil, fmt.Errorf("unsupported LDAP port: %s, use 389 for unencrypted or 636 for TLS/SSL", ldapConfig.Port) } defer l.Close() @@ -122,4 +143,4 @@ func isValidContact(entry *ldap.Entry) bool { telephoneNumber := entry.GetAttributeValue("telephoneNumber") return firstName != "" && lastName != "" && telephoneNumber != config.PhoneRules.InvalidNumber -} +} \ No newline at end of file