From f950c4c7097e724ccdac24892634bab7a26543fd Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Sat, 22 May 2004 00:46:00 +0000 Subject: [PATCH] Fixed slapd extended match memory leak (ITS#3146) --- CHANGES | 1 + doc/man/man5/slapd.conf.5 | 6 ++- servers/slapd/config.c | 83 +++++++++++++++++++-------------------- 3 files changed, 46 insertions(+), 44 deletions(-) diff --git a/CHANGES b/CHANGES index 68c5ca20f8..3afd71dd89 100644 --- a/CHANGES +++ b/CHANGES @@ -10,6 +10,7 @@ OpenLDAP 2.2.12 Engineering Fixed slapd set acl recursion (ITS#3140) Fixed slapd entry2mods normalization bug (ITS#3144,3152) Fixed slapd extended match memory leak (ITS#3146) + Fixed slapd syncrepl persist interval issue (ITS#3064) Fixed back-ldap normalization bug Fixed pcache cache_entries init bug (ITS#3150) Fixed pcache consistency_check bug (ITS#3151) diff --git a/doc/man/man5/slapd.conf.5 b/doc/man/man5/slapd.conf.5 index 380bb9999f..16decea045 100644 --- a/doc/man/man5/slapd.conf.5 +++ b/doc/man/man5/slapd.conf.5 @@ -1377,7 +1377,11 @@ operation, a synchronization search remains persistent in the provider slapd. Further updates to the master replica will generate .B searchResultEntry to the consumer slapd as the search responses to the persistent -synchronization search. The schema checking can be enforced at the LDAP Sync +synchronization search. If the connection is lost, the consumer will +attempt to reconnect at an interval time (specified by +.B interval +parameter; 60 seconds by default) until the session is re-established. +The schema checking can be enforced at the LDAP Sync consumer site by turning on the .B schemachecking parameter. The default is off. diff --git a/servers/slapd/config.c b/servers/slapd/config.c index ae65665ce2..df929414f4 100644 --- a/servers/slapd/config.c +++ b/servers/slapd/config.c @@ -3173,51 +3173,48 @@ parse_syncrepl_line( } else if ( !strncasecmp( cargv[ i ], INTERVALSTR, sizeof( INTERVALSTR ) - 1 ) ) { + char *hstr; + char *mstr; + char *dstr; + char *sstr; + int dd, hh, mm, ss; val = cargv[ i ] + sizeof( INTERVALSTR ); - if ( si->si_type == LDAP_SYNC_REFRESH_AND_PERSIST ) { - si->si_interval = 0; - } else { - char *hstr; - char *mstr; - char *dstr; - char *sstr; - int dd, hh, mm, ss; - dstr = val; - hstr = strchr( dstr, ':' ); - if ( hstr == NULL ) { - fprintf( stderr, "Error: parse_syncrepl_line: " - "invalid interval \"%s\"\n", val ); - return 1; - } - *hstr++ = '\0'; - mstr = strchr( hstr, ':' ); - if ( mstr == NULL ) { - fprintf( stderr, "Error: parse_syncrepl_line: " - "invalid interval \"%s\"\n", val ); - return 1; - } - *mstr++ = '\0'; - sstr = strchr( mstr, ':' ); - if ( sstr == NULL ) { - fprintf( stderr, "Error: parse_syncrepl_line: " - "invalid interval \"%s\"\n", val ); - return 1; - } - *sstr++ = '\0'; - - dd = atoi( dstr ); - hh = atoi( hstr ); - mm = atoi( mstr ); - ss = atoi( sstr ); - if (( hh > 24 ) || ( hh < 0 ) || - ( mm > 60 ) || ( mm < 0 ) || - ( ss > 60 ) || ( ss < 0 ) || ( dd < 0 )) { - fprintf( stderr, "Error: parse_syncrepl_line: " - "invalid interval \"%s\"\n", val ); - return 1; - } - si->si_interval = (( dd * 24 + hh ) * 60 + mm ) * 60 + ss; + dstr = val; + hstr = strchr( dstr, ':' ); + if ( hstr == NULL ) { + fprintf( stderr, "Error: parse_syncrepl_line: " + "invalid interval \"%s\"\n", val ); + return 1; } + *hstr++ = '\0'; + mstr = strchr( hstr, ':' ); + if ( mstr == NULL ) { + fprintf( stderr, "Error: parse_syncrepl_line: " + "invalid interval \"%s\"\n", val ); + return 1; + } + *mstr++ = '\0'; + sstr = strchr( mstr, ':' ); + if ( sstr == NULL ) { + fprintf( stderr, "Error: parse_syncrepl_line: " + "invalid interval \"%s\"\n", val ); + return 1; + } + *sstr++ = '\0'; + + dd = atoi( dstr ); + hh = atoi( hstr ); + mm = atoi( mstr ); + ss = atoi( sstr ); + if (( hh > 24 ) || ( hh < 0 ) || + ( mm > 60 ) || ( mm < 0 ) || + ( ss > 60 ) || ( ss < 0 ) || ( dd < 0 )) { + fprintf( stderr, "Error: parse_syncrepl_line: " + "invalid interval \"%s\"\n", val ); + return 1; + } + si->si_interval = (( dd * 24 + hh ) * 60 + mm ) * 60 + ss; + if ( si->si_interval < 0 ) { fprintf( stderr, "Error: parse_syncrepl_line: " "invalid interval \"%ld\"\n", -- 2.39.5