forked from Deuxfleurs/bottin
60 lines
1.7 KiB
Go
60 lines
1.7 KiB
Go
package main
|
|
|
|
func (server *Server) memberOfAdd(member string, group string) {
|
|
// Retreive previous memberOf value
|
|
memberGroups, err := server.getAttribute(member, ATTR_MEMBEROF)
|
|
if err != nil {
|
|
server.logger.Warnf("Could not add %s to memberOf of %s: %s", group, member, err)
|
|
return
|
|
}
|
|
|
|
// Return early if group is already in memberOf
|
|
for _, mb := range memberGroups {
|
|
if mb == group {
|
|
server.logger.Warnf("Inconsistency detected, %s was memberOf %s at a time when it didn't exist! (not an issue anymore)",
|
|
member, group)
|
|
return
|
|
}
|
|
}
|
|
|
|
// Add group to memberOf
|
|
memberGroups = append(memberGroups, group)
|
|
err = server.addElements(member, Entry{
|
|
ATTR_MEMBEROF: memberGroups,
|
|
})
|
|
if err != nil {
|
|
server.logger.Warnf("Could not add %s to memberOf of %s: %s", group, member, err)
|
|
}
|
|
}
|
|
|
|
func (server *Server) memberOfRemove(member string, group string) {
|
|
// Retreive previous memberOf value
|
|
memberOf, err := server.getAttribute(member, ATTR_MEMBEROF)
|
|
if err != nil || memberOf == nil {
|
|
server.logger.Warnf("Could not remove %s from memberOf of %s: %s", group, member, err)
|
|
return
|
|
}
|
|
|
|
// Filter out group
|
|
newMemberOf := []string{}
|
|
for _, mb := range memberOf {
|
|
if mb != group {
|
|
newMemberOf = append(newMemberOf, group)
|
|
}
|
|
}
|
|
|
|
// Return early if group already not in memberOf
|
|
if len(newMemberOf) == len(memberOf) {
|
|
server.logger.Warnf("Inconsistency detected, %s was not memberOf %s at a time when it should have been! (not an issue anymore)",
|
|
member, group)
|
|
return
|
|
}
|
|
|
|
// Update value of memberOf
|
|
err = server.addElements(member, Entry{
|
|
ATTR_MEMBEROF: newMemberOf,
|
|
})
|
|
if err != nil {
|
|
server.logger.Warnf("Could not remove %s from memberOf of %s: %s", group, member, err)
|
|
}
|
|
}
|