char *global_realm = NULL;
char *ldap_srvtab = "";
char **default_passwd_hash = NULL;
-char *passwd_salt;
-char *logfileName;
struct berval default_search_base = BER_BVNULL;
struct berval default_search_nbase = BER_BVNULL;
static char *replica_pidFile, *replica_argsFile;
static int replicationInterval;
+static char *passwd_salt;
+static char *logfileName;
+
#ifdef LDAP_SLAPI
int slapi_plugins_used = 0;
#endif
static int add_syncrepl LDAP_P(( Backend *, char **, int ));
static int parse_syncrepl_line LDAP_P(( char **, int, syncinfo_t *));
+static void syncrepl_unparse LDAP_P (( syncinfo_t *, struct berval *));
/* All of these table entries and handlers really belong
* in back-config, only the parser/table engine belongs here.
&config_generic, "( OLcfgAt:5 NAME 'olcAttributeOptions' "
"EQUALITY caseIgnoreMatch "
"SYNTAX OMsDirectoryString )", NULL, NULL },
- { "auth-rewrite", NULL, 2, 2, 14,
+ { "authid-rewrite", NULL, 2, 0, 0,
#ifdef SLAP_AUTH_REWRITE
ARG_MAGIC|CFG_REWRITE, &config_generic,
#else
ARG_IGNORED, NULL,
#endif
- "( OLcfgAt:6 NAME 'olcAuthRewrite' "
+ "( OLcfgAt:6 NAME 'olcAuthIDRewrite' "
"EQUALITY caseIgnoreMatch "
"SYNTAX OMsDirectoryString )", NULL, NULL },
{ "authz-policy", "policy", 2, 2, 0, ARG_STRING|ARG_MAGIC|CFG_AZPOLICY,
#endif
"( OLcfgAt:54 NAME 'olcSaslRealm' "
"SYNTAX OMsDirectoryString )", NULL, NULL },
- { "sasl-regexp", NULL, 2, 2, 0, ARG_MAGIC|CFG_AZREGEXP,
+ { "sasl-regexp", NULL, 3, 3, 0, ARG_MAGIC|CFG_AZREGEXP,
&config_generic, NULL, NULL, NULL },
{ "sasl-secprops", "properties", 2, 2, 0,
#ifdef HAVE_CYRUS_SASL
#endif
"( OLcfgAt:56 NAME 'olcSaslSecProps' "
"SYNTAX OMsDirectoryString )", NULL, NULL },
- { "saslRegexp", NULL, 2, 2, 0, ARG_MAGIC|CFG_AZREGEXP,
+ { "saslRegexp", NULL, 3, 3, 0, ARG_MAGIC|CFG_AZREGEXP,
&config_generic, NULL, NULL, NULL },
{ "schemacheck", "on|off", 2, 2, 0, ARG_ON_OFF|ARG_MAGIC|CFG_CHECK,
&config_generic, "( OLcfgAt:57 NAME 'olcSchemaCheck' "
else
rc = 1;
break;
- case CFG_LIMITS:
+ case CFG_LIMITS: /* FIXME */
rc = 1;
break;
case CFG_RO:
rc = 1;
break;
#ifdef HAVE_CYRUS_SASL
- case CFG_SASLSECP:
+ case CFG_SASLSECP: /* FIXME */
rc = 1;
break;
#endif
case CFG_DEPTH:
c->value_int = c->be->be_max_deref_depth;
break;
- case CFG_OID:
+ case CFG_OID: /* FIXME */
rc = 1;
break;
case CFG_CHECK:
c->value_int = index_substr_if_minlen;
break;
#ifdef SLAPD_MODULES
- case CFG_MODLOAD:
+ case CFG_MODLOAD: /* FIXME */
case CFG_MODPATH:
rc = 1;
break;
#endif
#ifdef LDAP_SLAPI
- case CFG_PLUGIN:
+ case CFG_PLUGIN: /* FIXME */
rc = 1;
break;
#endif
#ifdef SLAP_AUTH_REWRITE
- case CFG_REWRITE:
+ case CFG_REWRITE: /* FIXME */
rc = 1;
break;
#endif
break;
case CFG_LOGFILE: {
- if ( logfileName ) ch_free( logfileName );
- logfileName = c->value_string;
- FILE *logfile = fopen(logfileName, "w");
- if(logfile) lutil_debug_file(logfile);
- break;
- }
+ FILE *logfile;
+ if ( logfileName ) ch_free( logfileName );
+ logfileName = c->value_string;
+ logfile = fopen(logfileName, "w");
+ if(logfile) lutil_debug_file(logfile);
+ } break;
case CFG_LASTMOD:
if(SLAP_NOLASTMODCMD(c->be)) {
int i, rc = 0;
char *next;
struct slap_limits_set *lim = &c->be->be_def_limit;
- if (c->emit) {
+ if (c->emit) { /* FIXME */
return 1;
}
for(i = 1; i < c->argc; i++) {
char *next;
struct slap_limits_set *lim = &c->be->be_def_limit;
if (c->emit) {
- return 1;
+ return 1; /* FIXME */
}
for(i = 1; i < c->argc; i++) {
if(!strncasecmp(c->argv[i], "time", 4)) {
static int
config_syncrepl(ConfigArgs *c) {
if (c->emit) {
+ if ( c->be->be_syncinfo ) {
+ struct berval bv;
+ syncrepl_unparse( c->be->be_syncinfo, &bv );
+ ber_bvarray_add( &c->rvalue_vals, &bv );
+ return 0;
+ }
return 1;
}
if(SLAP_SHADOW(c->be)) {
{ BER_BVC("realm="), offsetof(slap_bindconf, sb_realm), 0, NULL },
{ BER_BVC("authcID="), offsetof(slap_bindconf, sb_authcId), 0, NULL },
{ BER_BVC("authzID="), offsetof(slap_bindconf, sb_authzId), 1, NULL },
- { BER_BVNULL, 0, NULL }
+ { BER_BVNULL, 0, 0, NULL }
};
int bindconf_parse( char *word, slap_bindconf *bc ) {
}
}
+static char *
+anlist_unparse( AttributeName *an, char *ptr ) {
+ int comma = 0;
+
+ for (; !BER_BVISNULL( &an->an_name ); an++) {
+ if ( comma ) *ptr++ = ',';
+ ptr = lutil_strcopy( ptr, an->an_name.bv_val );
+ comma = 1;
+ }
+ return ptr;
+}
+
static void
-replica_unparse( struct slap_replica_info *ri, struct berval *bv )
+replica_unparse( struct slap_replica_info *ri, int i, struct berval *bv )
{
int len;
- int i;
char *ptr;
struct berval bc = {0};
+ char numbuf[32];
- len = strlen( ri->ri_uri ) + STRLENOF("replica uri=");
+ len = sprintf(numbuf, "{%d}", i );
+
+ len += strlen( ri->ri_uri ) + STRLENOF("uri=");
if ( ri->ri_nsuffix ) {
for (i=0; !BER_BVISNULL( &ri->ri_nsuffix[i] ); i++) {
len += ri->ri_nsuffix[i].bv_len + STRLENOF(" suffix=\"\"");
bv->bv_val = ch_malloc(len + 1);
bv->bv_len = len;
- ptr = lutil_strcopy( bv->bv_val, "replica uri=" );
+ ptr = lutil_strcopy( bv->bv_val, numbuf );
+ ptr = lutil_strcopy( ptr, "uri=" );
ptr = lutil_strcopy( ptr, ri->ri_uri );
if ( ri->ri_nsuffix ) {
}
}
if ( ri->ri_attrs ) {
- int comma = 0;
ptr = lutil_strcopy( ptr, "attr" );
if ( ri->ri_exclude ) *ptr++ = '!';
*ptr++ = '=';
- for (i=0; !BER_BVISNULL( &ri->ri_attrs[i].an_name ); i++) {
- if ( comma ) *ptr++ = ',';
- ptr = lutil_strcopy( ptr, ri->ri_attrs[i].an_name.bv_val );
- }
+ ptr = anlist_unparse( ri->ri_attrs, ptr );
}
- if ( bc.bv_val )
+ if ( bc.bv_val ) {
strcpy( ptr, bc.bv_val );
+ ch_free( bc.bv_val );
+ }
}
static int
if (c->be->be_replica) {
struct berval bv;
for (i=0;c->be->be_replica[i]; i++) {
- replica_unparse( c->be->be_replica[i], &bv );
+ replica_unparse( c->be->be_replica[i], i, &bv );
ber_bvarray_add( &c->rvalue_vals, &bv );
}
return 0;
{ "never", LDAP_OPT_X_TLS_NEVER },
{ "demand", LDAP_OPT_X_TLS_DEMAND },
{ "try", LDAP_OPT_X_TLS_TRY },
- { "hard", LDAP_OPT_X_TLS_HARD }
+ { "hard", LDAP_OPT_X_TLS_HARD },
{ NULL, 0 }
}, *keys;
switch(c->type) {
for (i=0; keys[i].word; i++) {
if (keys[i].mask == c->value_int) {
c->value_string = ch_strdup( keys[i].word );
- rc = 0;
+ return 0;
}
}
return 1;
/* FIXME: undocumented */
#define OLDAUTHCSTR "bindprincipal"
#define EXATTRSSTR "exattrs"
-#define MANAGEDSAITSTR "manageDSAit"
#define RETRYSTR "retry"
/* FIXME: unused */
#define LMREQSTR "req"
#define SRVTABSTR "srvtab"
#define SUFFIXSTR "suffix"
-#define UPDATEDNSTR "updatedn"
+#define MANAGEDSAITSTR "manageDSAit"
/* mandatory */
#define GOT_ID 0x0001
/* check */
#define GOT_ALL (GOT_ID|GOT_PROVIDER)
+static struct {
+ struct berval key;
+ int val;
+} scopes[] = {
+ { BER_BVC("base"), LDAP_SCOPE_BASE },
+ { BER_BVC("one"), LDAP_SCOPE_ONELEVEL },
+#ifdef LDAP_SCOPE_SUBORDINATE
+ { BER_BVC("children"), LDAP_SCOPE_SUBORDINATE },
+ { BER_BVC("subordinate"), 0 },
+#endif
+ { BER_BVC("sub"), LDAP_SCOPE_SUBTREE },
+ { BER_BVNULL, 0 }
+};
+
static int
parse_syncrepl_line(
char **cargv,
} else if ( !strncasecmp( cargv[ i ], SCOPESTR "=",
STRLENOF( SCOPESTR "=" ) ) )
{
+ int j;
val = cargv[ i ] + STRLENOF( SCOPESTR "=" );
- if ( !strncasecmp( val, "base", STRLENOF( "base" ) )) {
- si->si_scope = LDAP_SCOPE_BASE;
- } else if ( !strncasecmp( val, "one", STRLENOF( "one" ) )) {
- si->si_scope = LDAP_SCOPE_ONELEVEL;
-#ifdef LDAP_SCOPE_SUBORDINATE
- } else if ( !strcasecmp( val, "subordinate" ) ||
- !strcasecmp( val, "children" ))
- {
- si->si_scope = LDAP_SCOPE_SUBORDINATE;
-#endif
- } else if ( !strncasecmp( val, "sub", STRLENOF( "sub" ) )) {
- si->si_scope = LDAP_SCOPE_SUBTREE;
- } else {
+ for ( j=0; !BER_BVISNULL(&scopes[j].key); j++ ) {
+ if (!strncasecmp( val, scopes[j].key.bv_val,
+ scopes[j].key.bv_len )) {
+ while (!scopes[j].val) j--;
+ si->si_scope = scopes[j].val;
+ break;
+ }
+ }
+ if ( BER_BVISNULL(&scopes[j].key) ) {
fprintf( stderr, "Error: parse_syncrepl_line: "
"unknown scope \"%s\"\n", val);
return -1;
ch_free( attr_fname );
return -1;
}
- ch_free( attr_fname );
+ si->si_anfile = attr_fname;
} else {
char *str, *s, *next;
char delimstr[] = " ,\t";
return 0;
}
+
+
+static void
+syncrepl_unparse( syncinfo_t *si, struct berval *bv )
+{
+ struct berval bc;
+ char buf[BUFSIZ*2], *ptr;
+ int i, len;
+
+ bindconf_unparse( &si->si_bindconf, &bc );
+ ptr = buf;
+ ptr += sprintf( ptr, IDSTR "=%03d " PROVIDERSTR "=%s",
+ si->si_rid, si->si_provideruri.bv_val );
+ if ( !BER_BVISNULL( &bc )) {
+ ptr = lutil_strcopy( ptr, bc.bv_val );
+ free( bc.bv_val );
+ }
+ if ( !BER_BVISEMPTY( &si->si_filterstr )) {
+ ptr = lutil_strcopy( ptr, " " FILTERSTR "=\"" );
+ ptr = lutil_strcopy( ptr, si->si_filterstr.bv_val );
+ *ptr++ = '"';
+ }
+ if ( !BER_BVISNULL( &si->si_base )) {
+ ptr = lutil_strcopy( ptr, " " SEARCHBASESTR "=\"" );
+ ptr = lutil_strcopy( ptr, si->si_base.bv_val );
+ *ptr++ = '"';
+ }
+ for (i=0; !BER_BVISNULL(&scopes[i].key);i++) {
+ if ( si->si_scope == scopes[i].val ) {
+ ptr = lutil_strcopy( ptr, " " SCOPESTR "=" );
+ ptr = lutil_strcopy( ptr, scopes[i].key.bv_val );
+ break;
+ }
+ }
+ if ( si->si_attrsonly ) {
+ ptr = lutil_strcopy( ptr, " " ATTRSONLYSTR "=yes" );
+ }
+ if ( si->si_anfile ) {
+ ptr = lutil_strcopy( ptr, " " ATTRSSTR "=:include:" );
+ ptr = lutil_strcopy( ptr, si->si_anfile );
+ } else if ( si->si_allattrs || si->si_allopattrs ||
+ ( si->si_anlist && !BER_BVISNULL(&si->si_anlist[0].an_name) )) {
+ char *old;
+ ptr = lutil_strcopy( ptr, " " ATTRSSTR "=\"" );
+ old = ptr;
+ ptr = anlist_unparse( si->si_anlist, ptr );
+ if ( si->si_allattrs ) {
+ if ( old != ptr ) *ptr++ = ',';
+ *ptr++ = '*';
+ }
+ if ( si->si_allopattrs ) {
+ if ( old != ptr ) *ptr++ = ',';
+ *ptr++ = '+';
+ }
+ *ptr++ = '"';
+ }
+ if ( si->si_exanlist && !BER_BVISNULL(&si->si_exanlist[0].an_name) ) {
+ ptr = lutil_strcopy( ptr, " " EXATTRSSTR "=" );
+ ptr = anlist_unparse( si->si_exanlist, ptr );
+ }
+ ptr = lutil_strcopy( ptr, " " SCHEMASTR "=" );
+ ptr = lutil_strcopy( ptr, si->si_schemachecking ? "on" : "off" );
+
+ ptr = lutil_strcopy( ptr, " " TYPESTR "=" );
+ ptr = lutil_strcopy( ptr, si->si_type == LDAP_SYNC_REFRESH_AND_PERSIST ?
+ "refreshAndPersist" : "refreshOnly" );
+
+ if ( si->si_type == LDAP_SYNC_REFRESH_ONLY ) {
+ int dd, hh, mm, ss;
+
+ dd = si->si_interval;
+ ss = dd % 60;
+ dd /= 60;
+ mm = dd % 60;
+ dd /= 60;
+ hh = dd % 24;
+ dd /= 24;
+ ptr = lutil_strcopy( ptr, " " INTERVALSTR "=" );
+ ptr += sprintf( ptr, "%02d:%02d:%02d:%02d", dd, hh, mm, ss );
+ } else if ( si->si_retryinterval ) {
+ int space=0;
+ ptr = lutil_strcopy( ptr, " " RETRYSTR "=\"" );
+ for (i=0; si->si_retryinterval[i]; i++) {
+ if ( space ) *ptr++ = ' ';
+ space = 1;
+ ptr += sprintf( ptr, "%d", si->si_retryinterval[i] );
+ if ( si->si_retrynum_init[i] == -1 )
+ *ptr++ = '+';
+ else
+ ptr += sprintf( ptr, "%d", si->si_retrynum_init );
+ }
+ *ptr++ = '"';
+ }
+
+#if 0 /* FIXME: unused in syncrepl.c, should remove it */
+ ptr = lutil_strcopy( ptr, " " MANAGEDSAITSTR "=" );
+ ptr += sprintf( ptr, "%d", si->si_manageDSAit );
+#endif
+
+ if ( si->si_slimit ) {
+ ptr = lutil_strcopy( ptr, " " SLIMITSTR "=" );
+ ptr += sprintf( ptr, "%d", si->si_slimit );
+ }
+
+ if ( si->si_tlimit ) {
+ ptr = lutil_strcopy( ptr, " " TLIMITSTR "=" );
+ ptr += sprintf( ptr, "%d", si->si_tlimit );
+ }
+ bc.bv_len = ptr - buf;
+ bc.bv_val = buf;
+ ber_dupbv( bv, &bc );
+}
+
char **
slap_str2clist( char ***out, char *in, const char *brkstr )
{