Full_Name: Emmanuel L.charny Version: OS: URL: ftp://ftp.openldap.org/incoming/ Submission from: (NULL) (176.154.3.51)
The parse_syncrepl_line function (syncrepl.c) returns either 0, -1 or 1. 0 is for success, -1 is for a error, 1 seems to be for a warning (ie a parameter is wrongly configured, but then it's ignored).
That's ok, except that in the loop where the parameters are parsed, if one of the parameters in {'retry', 'manageDSAit', 'sizelimit', 'timelimit'} is incorect, the following parameters aren't parsed at all, the fuction return 1.
At this point, in the caller function add_syncrepl, we have :
rc = parse_syncrepl_line( c, si );
if ( rc == 0 ) { ... }
if ( rc < 0 ) { Debug( LDAP_DEBUG_ANY, "failed to add syncinfo\n", 0, 0, 0 ); syncinfo_free( si, 0 );
return 1; } else { Debug( LDAP_DEBUG_CONFIG, "Config: ** successfully added syncrepl %s "%s"\n", si->si_ridtxt, BER_BVISNULL( &si->si_bindconf.sb_uri ) ? "(null)" : si->si_bindconf.sb_uri.bv_val, 0 ); ...
So here, we will have a message indicating syncrepl has properly be initialized, when many parameters might have been ignored.
It seems the proper handling of those wrongly initialized parameters should be to do a 'continue' instead of returning 1, and add a warning in logs. Like :
... else if ( !strncasecmp( c->argv[ i ], RETRYSTR "=", STRLENOF( RETRYSTR "=" ) ) ) { if ( parse_syncrepl_retry( c, c->argv[ i ], si ) ) { continue; /* was return 1; } }
Or maybe we just want to return -1 in all cases ?