mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-06 05:01:10 -05:00
58 lines
1.5 KiB
Go
58 lines
1.5 KiB
Go
package ldif
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/go-ldap/ldap/v3"
|
|
)
|
|
|
|
// Apply sends the LDIF entries to the server and does the changes as
|
|
// given by the entries.
|
|
//
|
|
// All *ldap.Entry are converted to an *ldap.AddRequest.
|
|
//
|
|
// By default, it returns on the first error. To continue with applying the
|
|
// LDIF, set the continueOnErr argument to true - in this case the errors
|
|
// are logged with log.Printf()
|
|
func (l *LDIF) Apply(conn ldap.Client, continueOnErr bool) error {
|
|
for _, entry := range l.Entries {
|
|
switch {
|
|
case entry.Entry != nil:
|
|
add := ldap.NewAddRequest(entry.Entry.DN, entry.Add.Controls)
|
|
for _, attr := range entry.Entry.Attributes {
|
|
add.Attribute(attr.Name, attr.Values)
|
|
}
|
|
entry.Add = add
|
|
fallthrough
|
|
case entry.Add != nil:
|
|
if err := conn.Add(entry.Add); err != nil {
|
|
if continueOnErr {
|
|
log.Printf("ERROR: Failed to add %s: %s", entry.Add.DN, err)
|
|
continue
|
|
}
|
|
return fmt.Errorf("failed to add %s: %s", entry.Add.DN, err)
|
|
}
|
|
|
|
case entry.Del != nil:
|
|
if err := conn.Del(entry.Del); err != nil {
|
|
if continueOnErr {
|
|
log.Printf("ERROR: Failed to delete %s: %s", entry.Del.DN, err)
|
|
continue
|
|
}
|
|
return fmt.Errorf("failed to delete %s: %s", entry.Del.DN, err)
|
|
}
|
|
|
|
case entry.Modify != nil:
|
|
if err := conn.Modify(entry.Modify); err != nil {
|
|
if continueOnErr {
|
|
log.Printf("ERROR: Failed to modify %s: %s", entry.Modify.DN, err)
|
|
continue
|
|
}
|
|
return fmt.Errorf("failed to modify %s: %s", entry.Modify.DN, err)
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|