The branch, master has been updated
       via  bd9b272 ldb: detect eof on ldif files
       via  daeb6a0 s4-dsdb: allow modification of linked attribute targets 
with relax
      from  af31bf6 debug: ignore debug_set_logfile() with a blank string

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit bd9b2727ef1cb63630c58afe1bba2f4f93246180
Author: Andrew Tridgell <[email protected]>
Date:   Tue Mar 29 16:31:17 2011 +1100

    ldb: detect eof on ldif files
    
    use feof() to detect parsing errors in ldif files
    
    Autobuild-User: Andrew Tridgell <[email protected]>
    Autobuild-Date: Tue Mar 29 08:24:04 CEST 2011 on sn-devel-104

commit daeb6a02eab5822c557ab167fbc171aebe2ddf05
Author: Andrew Tridgell <[email protected]>
Date:   Tue Mar 29 16:14:18 2011 +1100

    s4-dsdb: allow modification of linked attribute targets with relax
    
    this is used to help recover a corrupt database.
    
    Pair-Programmed-With: Andrew Bartlett <[email protected]>

-----------------------------------------------------------------------

Summary of changes:
 source4/dsdb/samdb/ldb_modules/objectclass_attrs.c |    3 ++-
 source4/lib/ldb/tools/ldbedit.c                    |   15 +++++++++++++++
 source4/lib/ldb/tools/ldbmodify.c                  |    5 +++++
 3 files changed, 22 insertions(+), 1 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/dsdb/samdb/ldb_modules/objectclass_attrs.c 
b/source4/dsdb/samdb/ldb_modules/objectclass_attrs.c
index 8f6cc66..9df1210 100644
--- a/source4/dsdb/samdb/ldb_modules/objectclass_attrs.c
+++ b/source4/dsdb/samdb/ldb_modules/objectclass_attrs.c
@@ -127,7 +127,8 @@ static int attr_handler(struct oc_context *ac)
                        return LDB_ERR_NO_SUCH_ATTRIBUTE;
                }
 
-               if ((attr->linkID & 1) == 1) {
+               if ((attr->linkID & 1) == 1 &&
+                   !ldb_request_get_control(ac->req, LDB_CONTROL_RELAX_OID)) {
                        /* Odd is for the target.  Illegal to modify */
                        ldb_asprintf_errstring(ldb, 
                                               "objectclass_attrs: attribute 
'%s' on entry '%s' must not be modified directly, it is a linked attribute", 
diff --git a/source4/lib/ldb/tools/ldbedit.c b/source4/lib/ldb/tools/ldbedit.c
index 36d054e..aaf6d80 100644
--- a/source4/lib/ldb/tools/ldbedit.c
+++ b/source4/lib/ldb/tools/ldbedit.c
@@ -281,6 +281,21 @@ static int do_edit(struct ldb_context *ldb, struct 
ldb_message **msgs1,
                msgs2[count2++] = ldif->msg;
        }
 
+       /* the feof() test works here, even for the last line of the
+        * file, as we parse ldif files character by character, and
+        * feof() is only true if we have failed to read a character
+        * from the file. So if the last line is bad, we don't get
+        * feof() set, so we know the record was bad. Only if we
+        * attempt to go to the next record will we get feof() and
+        * thus consider that the ldif has ended without errors
+        */
+       if (!feof(f)) {
+               fprintf(stderr, "Error parsing ldif - aborting\n");
+               fclose(f);
+               unlink(file_template);
+               return -1;
+       }
+
        fclose(f);
        unlink(file_template);
 
diff --git a/source4/lib/ldb/tools/ldbmodify.c 
b/source4/lib/ldb/tools/ldbmodify.c
index 1484bbf..1374765 100644
--- a/source4/lib/ldb/tools/ldbmodify.c
+++ b/source4/lib/ldb/tools/ldbmodify.c
@@ -87,6 +87,11 @@ static int process_file(struct ldb_context *ldb, FILE *f, 
unsigned int *count)
                ldb_ldif_read_free(ldb, ldif);
        }
 
+       if (!feof(f)) {
+               fprintf(stderr, "Failed to parse ldif\n");
+               return -1;
+       }
+
        return ret;
 }
 


-- 
Samba Shared Repository

Reply via email to