Skip to content
Snippets Groups Projects
Commit 3b091040 authored by Sergey Yakubov's avatar Sergey Yakubov
Browse files

fix getting list of hosts from LDAP

parent eba39856
Branches
Tags
No related merge requests found
......@@ -11,11 +11,15 @@ objectClass :top
objectClass :nisNetgroup
cn:a3p00-hosts
description: Netgroup for nodes on PETRA III Beamline P00
nisNetgroupTriple: (blabla,-,)
nisNetgroupTriple: (localhost,-,)
nisNetgroupTriple: (blabla2,-,)
dn: cn=a3p07-hosts,ou=netgroup,ou=rgy,o=desy,c=de
objectClass :top
objectClass :nisNetgroup
cn:a3p07-hosts
description: Netgroup for nodes on PETRA III Beamline P07
nisNetgroupTriple: (blabla,-,)
nisNetgroupTriple: (localhost,-,)
nisNetgroupTriple: (blabla2,-,)
\ No newline at end of file
......@@ -2,6 +2,7 @@ package ldap_client
import (
"asapo_authorizer/common"
log "asapo_common/logger"
"asapo_common/utils"
"net"
"strings"
......@@ -11,10 +12,10 @@ import "github.com/go-ldap/ldap"
type OpenLdapClient struct {
}
func (c *OpenLdapClient) GetAllowedIpsForBeamline(url string,base string,filter string) ([]string, error) {
func (c *OpenLdapClient) GetAllowedIpsForBeamline(url string, base string, filter string) ([]string, error) {
l, err := ldap.DialURL(url)
if err != nil {
return []string{},&common.ServerError{utils.StatusServiceUnavailable, err.Error()}
return []string{}, &common.ServerError{utils.StatusServiceUnavailable, err.Error()}
}
defer l.Close()
......@@ -28,28 +29,35 @@ func (c *OpenLdapClient) GetAllowedIpsForBeamline(url string,base string,filter
sr, err := l.Search(searchRequest)
if err != nil {
if ldap.IsErrorWithCode(err,ldap.LDAPResultNoSuchObject) {
return []string{},nil
if ldap.IsErrorWithCode(err, ldap.LDAPResultNoSuchObject) {
return []string{}, nil
} else {
return []string{},err
return []string{}, err
}
}
res := make([]string,0)
res := make([]string, 0)
var lasterr error = nil
for _, entry := range sr.Entries {
host := entry.GetAttributeValue("nisNetgroupTriple")
host = strings.TrimPrefix(host,"(")
host = strings.Split(host, ",")[0]
addrs,err := net.LookupIP(host)
if err != nil {
return []string{},err
}
for _, addr := range addrs {
if ipv4 := addr.To4(); ipv4 != nil {
res = append(res,ipv4.String())
hosts := entry.GetAttributeValues("nisNetgroupTriple")
for _, host := range hosts {
host = strings.TrimPrefix(host, "(")
host = strings.Split(host, ",")[0]
addrs, err := net.LookupIP(host)
if err != nil {
lasterr = err
log.Warning("cannot lookup ip for " + host)
continue
}
for _, addr := range addrs {
if ipv4 := addr.To4(); ipv4 != nil {
res = append(res, ipv4.String())
}
}
}
}
return res,nil
if len(res) == 0 {
return res, lasterr
}
return res, nil
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment