]> git.sur5r.net Git - openldap/commitdiff
ITS#5892 return -1 from ldif_read_record on error
authorHoward Chu <hyc@openldap.org>
Tue, 7 Jul 2009 22:30:55 +0000 (22:30 +0000)
committerHoward Chu <hyc@openldap.org>
Tue, 7 Jul 2009 22:30:55 +0000 (22:30 +0000)
clients/tools/ldapmodify.c
libraries/liblutil/ldif.c
servers/slapd/back-sql/config.c
servers/slapd/root_dse.c
servers/slapd/slapadd.c

index c119c5e9eeb4e9dc5797fa6e0158f0a30d234070..277f11be2cc31875336d90c331aa72496934c5c6 100644 (file)
@@ -240,7 +240,7 @@ main( int argc, char **argv )
        FILE            *rejfp;
        struct LDIFFP *ldiffp, ldifdummy = {0};
        char            *matched_msg, *error_msg;
-       int             rc, retval;
+       int             rc, retval, ldifrc;
        int             len;
        int             i = 0;
        int             lineno, nextline = 0, lmax = 0;
@@ -326,8 +326,8 @@ main( int argc, char **argv )
        rc = 0;
        retval = 0;
        lineno = 1;
-       while (( rc == 0 || contoper ) && ldif_read_record( ldiffp, &nextline,
-               &rbuf, &lmax ))
+       while (( rc == 0 || contoper ) && ( ldifrc = ldif_read_record( ldiffp, &nextline,
+               &rbuf, &lmax )) > 0 )
        {
                if ( rejfp ) {
                        len = strlen( rbuf );
@@ -369,6 +369,9 @@ main( int argc, char **argv )
        }
        ber_memfree( rbuf );
 
+       if ( ldifrc < 0 )
+               retval = LDAP_OTHER;
+
 #ifdef LDAP_X_TXN
        if( retval == 0 && txn ) {
                rc = ldap_set_option( ld, LDAP_OPT_SERVER_CONTROLS, NULL );
index 2eb31ae258733303143a4a738daf34e27756c696..0e56870737317dfdf2571a93763d3ed4cbe6316b 100644 (file)
@@ -780,7 +780,8 @@ ldif_close(
 #define        LDIF_MAXLINE    4096
 
 /*
- * ldif_read_record - read an ldif record.  Return 1 for success, 0 for EOF.
+ * ldif_read_record - read an ldif record.  Return 1 for success, 0 for EOF,
+ * -1 for error.
  */
 int
 ldif_read_record(
@@ -882,7 +883,7 @@ ldif_read_record(
                                                         */
                                                        ber_pvt_log_printf( LDAP_DEBUG_ANY, ldif_debug,
                                                                _("ldif_read_record: include %s failed\n"), ptr );
-                                                       return 0;
+                                                       return -1;
                                                }
                                        }
                                }
index fcf0d63e19eef241947f049167ca981879ece26e..23f6525aa5a05fb8b90f5912cc2a9a83e0a1b02a 100644 (file)
@@ -659,7 +659,7 @@ read_baseObject(
 {
        backsql_info    *bi = (backsql_info *)be->be_private;
        LDIFFP          *fp;
-       int             rc = 0, lineno = 0, lmax = 0;
+       int             rc = 0, lineno = 0, lmax = 0, ldifrc;
        char            *buf = NULL;
 
        assert( fname != NULL );
@@ -685,7 +685,7 @@ read_baseObject(
        bi->sql_baseObject->e_nname = be->be_nsuffix[0];
        bi->sql_baseObject->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;
 
@@ -704,7 +704,7 @@ read_baseObject(
                                "dn=\"%s\" (line=%d)\n",
                                e->e_name.bv_val, lineno );
                        entry_free( e );
-                       rc = EXIT_FAILURE;
+                       rc = LDAP_OTHER;
                        break;
                }
 
@@ -729,6 +729,9 @@ read_baseObject(
                }
        }
 
+       if ( ldifrc < 0 )
+               rc = LDAP_OTHER;
+
        if ( rc ) {
                entry_free( bi->sql_baseObject );
                bi->sql_baseObject = NULL;
index 8b7322122e6f0cb82155bf9970b410e9aa704c4c..3f1897bf1090697e954f541f2313b4ec4540aac1 100644 (file)
@@ -401,7 +401,7 @@ int
 root_dse_read_file( const char *fname )
 {
        struct LDIFFP   *fp;
-       int rc = 0, lineno = 0, lmax = 0;
+       int rc = 0, lineno = 0, lmax = 0, ldifrc;
        char    *buf = NULL;
 
        if ( (fp = ldif_open( fname, "r" )) == NULL ) {
@@ -421,7 +421,7 @@ 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;
 
@@ -429,7 +429,7 @@ root_dse_read_file( const char *fname )
                        Debug( LDAP_DEBUG_ANY, "root_dse_read_file: "
                                "could not parse entry (file=\"%s\" line=%d)\n",
                                fname, lineno, 0 );
-                       rc = EXIT_FAILURE;
+                       rc = LDAP_OTHER;
                        break;
                }
 
@@ -440,7 +440,7 @@ root_dse_read_file( const char *fname )
                                "- dn=\"%s\" (file=\"%s\" line=%d)\n",
                                e->e_dn, fname, lineno );
                        entry_free( e );
-                       rc = EXIT_FAILURE;
+                       rc = LDAP_OTHER;
                        break;
                }
 
@@ -463,6 +463,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;
index a6cf3a2e219e52c05416564903a6b123b28a546b..b08fd3cea26ad021c270bf6a890e2f64d806d413 100644 (file)
@@ -64,7 +64,7 @@ slapadd( int argc, char **argv )
 
        int match;
        int checkvals;
-       int lineno, nextline;
+       int lineno, nextline, ldifrc;
        int lmax;
        int rc = EXIT_SUCCESS;
        int manage = 0; 
@@ -142,7 +142,7 @@ slapadd( int argc, char **argv )
        }
 
        /* nextline is the line number of the end of the current entry */
-       for( lineno=1; ldif_read_record( ldiffp, &nextline, &buf, &lmax );
+       for( lineno=1; ( ldifrc = ldif_read_record( ldiffp, &nextline, &buf, &lmax )) > 0;
                lineno=nextline+1 )
        {
                BackendDB *bd;
@@ -403,6 +403,9 @@ slapadd( int argc, char **argv )
                entry_free( e );
        }
 
+       if ( ldifrc < 0 )
+               rc = EXIT_FAILURE;
+
        bvtext.bv_len = textlen;
        bvtext.bv_val = textbuf;
        bvtext.bv_val[0] = '\0';