From 7950cbb484f6b517cd00fec4cdde93fc305ca01c Mon Sep 17 00:00:00 2001
From: Rich Megginson <rmeggins@redhat.com>
Date: Mon, 27 Jun 2011 10:50:00 -0600
Subject: [PATCH 2/3] add support for ldif files with changetype: add

IPA config files use changetype: add to add new files.  This was not
supported by the DS ConfigFile directive or other LDIF processing.
Now, if we see that the entry has changetype: add, we process it as if
it had no changetype at all, which is to add the entry.  Remove
the changetype: from the entry before adding.
---
 ldap/admin/src/scripts/DSUtil.pm.in |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/ldap/admin/src/scripts/DSUtil.pm.in b/ldap/admin/src/scripts/DSUtil.pm.in
index d330d0b..16f46b6 100644
--- a/ldap/admin/src/scripts/DSUtil.pm.in
+++ b/ldap/admin/src/scripts/DSUtil.pm.in
@@ -306,7 +306,7 @@ sub check_and_add_entry
     } else {
         debug(3, "check_and_add_entry: Entry not found " . $aentry->{dn} .
               " error " . $conn->getErrorString() . "\n");
-        if (@ctypes) { # uh oh - attempt to del/mod an entry that doesn't exist
+        if (@ctypes and !("add" eq lc($ctypes[0]))) { # uh oh - attempt to del/mod an entry that doesn't exist
             debug(3, "check_and_add_entry: attepting to @ctypes the entry " . $aentry->{dn} .
                   " that does not exist\n");
             return 1; # ignore - return success
@@ -323,7 +323,7 @@ sub check_and_add_entry
         my $OP_DEL = 3;
         # $op stores either of the above $OP_ values
         my $op = $OP_NONE;
-        if ( 0 > $#ctypes )    # aentry: complete entry
+        if ( (0 > $#ctypes) or ("add" eq lc($ctypes[0])) )    # aentry: complete entry
         {
             $op = $OP_ADD; # just add the entry
         }
@@ -351,6 +351,10 @@ sub check_and_add_entry
 
         if ( $OP_ADD == $op )
         {
+            if ("add" eq lc($ctypes[0])) {
+                # remove the changetype: add from the entry
+                $aentry->remove('changetype');
+            }
             $conn->add($aentry);
             my $rc = $conn->getErrorCode();
             if ( $rc != 0 )
-- 
1.7.1
