del.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package ldap
  2. import (
  3. "log"
  4. ber "github.com/go-asn1-ber/asn1-ber"
  5. )
  6. // DelRequest implements an LDAP deletion request
  7. type DelRequest struct {
  8. // DN is the name of the directory entry to delete
  9. DN string
  10. // Controls hold optional controls to send with the request
  11. Controls []Control
  12. }
  13. func (req *DelRequest) appendTo(envelope *ber.Packet) error {
  14. pkt := ber.Encode(ber.ClassApplication, ber.TypePrimitive, ApplicationDelRequest, req.DN, "Del Request")
  15. pkt.Data.Write([]byte(req.DN))
  16. envelope.AppendChild(pkt)
  17. if len(req.Controls) > 0 {
  18. envelope.AppendChild(encodeControls(req.Controls))
  19. }
  20. return nil
  21. }
  22. // NewDelRequest creates a delete request for the given DN and controls
  23. func NewDelRequest(DN string, Controls []Control) *DelRequest {
  24. return &DelRequest{
  25. DN: DN,
  26. Controls: Controls,
  27. }
  28. }
  29. // Del executes the given delete request
  30. func (l *Conn) Del(delRequest *DelRequest) error {
  31. msgCtx, err := l.doRequest(delRequest)
  32. if err != nil {
  33. return err
  34. }
  35. defer l.finishMessage(msgCtx)
  36. packet, err := l.readPacket(msgCtx)
  37. if err != nil {
  38. return err
  39. }
  40. if packet.Children[1].Tag == ApplicationDelResponse {
  41. err := GetLDAPError(packet)
  42. if err != nil {
  43. return err
  44. }
  45. } else {
  46. log.Printf("Unexpected Response: %d", packet.Children[1].Tag)
  47. }
  48. return nil
  49. }