X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Fliblutil%2Fldif.c;h=bb5ab7e1a1da65cce3f9708ab4d44417f143571b;hb=10595e7e5877b224077ae388913f96dbf26e9138;hp=defc1932d34c0ecd9a17682166f0317ae890fe52;hpb=581c1ff6c74f5eb281b5e0052b2a5ca84a7679bd;p=openldap diff --git a/libraries/liblutil/ldif.c b/libraries/liblutil/ldif.c index defc1932d3..bb5ab7e1a1 100644 --- a/libraries/liblutil/ldif.c +++ b/libraries/liblutil/ldif.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1998-2006 The OpenLDAP Foundation. + * Copyright 1998-2007 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -777,6 +777,8 @@ ldif_close( } } +#define LDIF_MAXLINE 4096 + /* * ldif_read_record - read an ldif record. Return 1 for success, 0 for EOF. */ @@ -787,7 +789,7 @@ ldif_read_record( char **bufp, /* ptr to malloced output buffer */ int *buflenp ) /* ptr to length of *bufp */ { - char linebuf[BUFSIZ], *line, *nbufp; + char linebuf[LDIF_MAXLINE], *line, *nbufp; ber_len_t lcur = 0, len, linesize; int last_ch = '\n', found_entry = 0, stop, top_comment = 0; @@ -822,7 +824,8 @@ ldif_read_record( if ( last_ch == '\n' ) { (*lno)++; - if ( line[0] == '\n' ) { + if ( line[0] == '\n' || + ( line[0] == '\r' && line[1] == '\n' )) { if ( !found_entry ) { lcur = 0; top_comment = 0; @@ -862,6 +865,10 @@ ldif_read_record( fp2 = ldif_open_url( ptr ); if ( fp2 ) { LDIFFP *lnew = ber_memalloc( sizeof( LDIFFP )); + if ( lnew == NULL ) { + fclose( fp2 ); + return 0; + } lnew->prev = lfp->prev; lnew->fp = lfp->fp; lfp->prev = lnew; @@ -873,7 +880,9 @@ ldif_read_record( /* We failed to open the file, this should * be reported as an error somehow. */ - break; + ber_pvt_log_printf( LDAP_DEBUG_ANY, ldif_debug, + _("ldif_read_record: include %s failed\n"), ptr ); + return 0; } } } @@ -881,7 +890,7 @@ ldif_read_record( } if ( *buflenp - lcur <= len ) { - *buflenp += len + BUFSIZ; + *buflenp += len + LDIF_MAXLINE; nbufp = ber_memrealloc( *bufp, *buflenp ); if( nbufp == NULL ) { return 0;