]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/root_dse.c
ITS#7588 fix double-free for sorted paged search
[openldap] / servers / slapd / root_dse.c
index 4871006693076253dbcc968f2f66c06fce4a4117..195b52cfb9560a9123b3128db741cfdb90359dc8 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1999-2009 The OpenLDAP Foundation.
+ * Copyright 1999-2013 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -277,8 +277,7 @@ fail:
                }
                for ( j = 0; be->be_suffix[j].bv_val != NULL; j++ ) {
                        if( attr_merge_one( e, ad_namingContexts,
-                                       &be->be_suffix[j],
-                                       &be->be_nsuffix[0] ) )
+                                       &be->be_suffix[j], NULL ) )
                        {
                                goto fail;
                        }
@@ -402,7 +401,8 @@ int
 root_dse_read_file( const char *fname )
 {
        struct LDIFFP   *fp;
-       int rc = 0, lineno = 0, lmax = 0;
+       int rc = 0, lmax = 0, ldifrc;
+       unsigned long lineno = 0;
        char    *buf = NULL;
 
        if ( (fp = ldif_open( fname, "r" )) == NULL ) {
@@ -422,15 +422,15 @@ root_dse_read_file( const char *fname )
        }
        usr_attr->e_attrs = NULL;
 
-       while( ldif_read_record( fp, &lineno, &buf, &lmax ) ) {
+       while(( ldifrc = ldif_read_record( fp, &lineno, &buf, &lmax )) > 0 ) {
                Entry *e = str2entry( buf );
                Attribute *a;
 
                if( e == NULL ) {
                        Debug( LDAP_DEBUG_ANY, "root_dse_read_file: "
-                               "could not parse entry (file=\"%s\" line=%d)\n",
+                               "could not parse entry (file=\"%s\" line=%lu)\n",
                                fname, lineno, 0 );
-                       rc = EXIT_FAILURE;
+                       rc = LDAP_OTHER;
                        break;
                }
 
@@ -438,10 +438,10 @@ root_dse_read_file( const char *fname )
                if( e->e_nname.bv_len ) {
                        Debug( LDAP_DEBUG_ANY,
                                "root_dse_read_file: invalid rootDSE "
-                               "- dn=\"%s\" (file=\"%s\" line=%d)\n",
+                               "- dn=\"%s\" (file=\"%s\" line=%lu)\n",
                                e->e_dn, fname, lineno );
                        entry_free( e );
-                       rc = EXIT_FAILURE;
+                       rc = LDAP_OTHER;
                        break;
                }
 
@@ -464,6 +464,9 @@ root_dse_read_file( const char *fname )
                if (rc) break;
        }
 
+       if ( ldifrc < 0 )
+               rc = LDAP_OTHER;
+
        if (rc) {
                entry_free( usr_attr );
                usr_attr = NULL;