|
|
@ -10,7 +10,6 @@ import ( |
|
|
|
"io/ioutil" |
|
|
|
"os" |
|
|
|
"os/signal" |
|
|
|
"strings" |
|
|
|
"syscall" |
|
|
|
|
|
|
|
ldap "bottin/ldapserver" |
|
|
@ -358,84 +357,6 @@ func (server *Server) init() error { |
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
func (server *Server) putAttributes(dn string, attrs Entry) error { |
|
|
|
prefix, err := dnToConsul(dn) |
|
|
|
if err != nil { |
|
|
|
return err |
|
|
|
} |
|
|
|
|
|
|
|
for k, valuesNC := range attrs { |
|
|
|
path := prefix + "/attribute=" + k |
|
|
|
|
|
|
|
// Trim spaces and remove empty values
|
|
|
|
values := []string{} |
|
|
|
for _, v := range valuesNC { |
|
|
|
vv := strings.TrimSpace(v) |
|
|
|
if len(vv) > 0 { |
|
|
|
values = append(values, vv) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// If we have zero values, delete associated k/v pair
|
|
|
|
// Otherwise, write new values
|
|
|
|
if len(values) == 0 { |
|
|
|
_, err := server.kv.Delete(path, nil) |
|
|
|
if err != nil { |
|
|
|
return err |
|
|
|
} |
|
|
|
} else { |
|
|
|
json, err := json.MarshalIndent(values, "", " ") |
|
|
|
if err != nil { |
|
|
|
return err |
|
|
|
} |
|
|
|
pair := &consul.KVPair{Key: path, Value: json} |
|
|
|
_, err = server.kv.Put(pair, nil) |
|
|
|
if err != nil { |
|
|
|
return err |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
func (server *Server) getAttribute(dn string, attr string) ([]string, error) { |
|
|
|
path, err := dnToConsul(dn) |
|
|
|
if err != nil { |
|
|
|
return nil, err |
|
|
|
} |
|
|
|
|
|
|
|
pairs, _, err := server.kv.List(path+"/attribute=", &server.readOpts) |
|
|
|
if err != nil { |
|
|
|
return nil, err |
|
|
|
} |
|
|
|
|
|
|
|
values := []string{} |
|
|
|
for _, pair := range pairs { |
|
|
|
if strings.EqualFold(pair.Key, path+"/attribute="+attr) { |
|
|
|
newVals, err := parseValue(pair.Value) |
|
|
|
if err != nil { |
|
|
|
return nil, err |
|
|
|
} |
|
|
|
values = append(values, newVals...) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return values, nil |
|
|
|
} |
|
|
|
|
|
|
|
func (server *Server) objectExists(dn string) (bool, error) { |
|
|
|
prefix, err := dnToConsul(dn) |
|
|
|
if err != nil { |
|
|
|
return false, err |
|
|
|
} |
|
|
|
|
|
|
|
data, _, err := server.kv.List(prefix+"/attribute=", &server.readOpts) |
|
|
|
if err != nil { |
|
|
|
return false, err |
|
|
|
} |
|
|
|
return len(data) > 0, nil |
|
|
|
} |
|
|
|
|
|
|
|
func (server *Server) checkDN(dn string, allow_extend bool) (string, error) { |
|
|
|
// 1. Canonicalize: remove spaces between things and put all in lower case
|
|
|
|
dn, err := canonicalDN(dn) |
|
|
|