+ BACKSQL_USE_SUBTREE_SHORTCUT( bi ) ? "yes" : "no",
+ 0, 0 );
+
+ } else if ( !strcasecmp( argv[ 0 ], "fetch_all_attrs" ) ) {
+ if ( argc < 2 ) {
+ Debug( LDAP_DEBUG_TRACE,
+ "<==backsql_db_config (%s line %d): "
+ "missing { yes | no }"
+ "in \"fetch_all_attrs\" directive\n",
+ fname, lineno, 0 );
+ return 1;
+ }
+
+ if ( strcasecmp( argv[ 1 ], "yes" ) == 0 ) {
+ bi->sql_flags |= BSQLF_FETCH_ALL_ATTRS;
+
+ } else if ( strcasecmp( argv[ 1 ], "no" ) == 0 ) {
+ bi->sql_flags &= ~BSQLF_FETCH_ALL_ATTRS;
+
+ } else {
+ Debug( LDAP_DEBUG_TRACE,
+ "<==backsql_db_config (%s line %d): "
+ "\"fetch_all_attrs\" directive arg "
+ "must be \"yes\" or \"no\"\n",
+ fname, lineno, 0 );
+ return 1;
+
+ }
+ Debug( LDAP_DEBUG_TRACE, "<==backsql_db_config(): "
+ "fetch_all_attrs=%s\n",
+ BACKSQL_FETCH_ALL_ATTRS( bi ) ? "yes" : "no",
+ 0, 0 );
+
+ } else if ( !strcasecmp( argv[ 0 ], "fetch_attrs" ) ) {
+ char *str, *s, *next;
+ const char *delimstr = ",";
+
+ if ( argc < 2 ) {
+ Debug( LDAP_DEBUG_TRACE,
+ "<==backsql_db_config (%s line %d): "
+ "missing <attrlist>"
+ "in \"fetch_all_attrs <attrlist>\" directive\n",
+ fname, lineno, 0 );
+ return 1;
+ }
+
+ str = ch_strdup( argv[ 1 ] );
+ for ( s = ldap_pvt_strtok( str, delimstr, &next );
+ s != NULL;
+ s = ldap_pvt_strtok( NULL, delimstr, &next ) )
+ {
+ if ( strlen( s ) == 1 ) {
+ if ( *s == '*' ) {
+ bi->sql_flags |= BSQLF_FETCH_ALL_USERATTRS;
+ argv[ 1 ][ s - str ] = ',';
+
+ } else if ( *s == '+' ) {
+ bi->sql_flags |= BSQLF_FETCH_ALL_OPATTRS;
+ argv[ 1 ][ s - str ] = ',';
+ }
+ }
+ }
+ ch_free( str );
+ bi->sql_anlist = str2anlist( bi->sql_anlist, argv[ 1 ], delimstr );
+ if ( bi->sql_anlist == NULL ) {
+ return -1;
+ }
+
+ } else if ( !strcasecmp( argv[ 0 ], "check_schema" ) ) {
+ if ( argc != 2 ) {
+ Debug( LDAP_DEBUG_TRACE,
+ "<==backsql_db_config (%s line %d): "
+ "missing { yes | no }"
+ "in \"check_schema\" directive\n",
+ fname, lineno, 0 );
+ return 1;
+ }
+
+ if ( strcasecmp( argv[ 1 ], "yes" ) == 0 ) {
+ bi->sql_flags |= BSQLF_CHECK_SCHEMA;
+
+ } else if ( strcasecmp( argv[ 1 ], "no" ) == 0 ) {
+ bi->sql_flags &= ~BSQLF_CHECK_SCHEMA;
+
+ } else {
+ Debug( LDAP_DEBUG_TRACE,
+ "<==backsql_db_config (%s line %d): "
+ "\"check_schema\" directive arg "
+ "must be \"yes\" or \"no\"\n",
+ fname, lineno, 0 );
+ return 1;
+
+ }
+ Debug( LDAP_DEBUG_TRACE, "<==backsql_db_config(): "
+ "check_schema=%s\n",
+ BACKSQL_CHECK_SCHEMA( bi ) ? "yes" : "no",
+ 0, 0 );
+
+ } else if ( !strcasecmp( argv[ 0 ], "aliasing_keyword" ) ) {
+ if ( argc != 2 ) {
+ Debug( LDAP_DEBUG_TRACE,
+ "<==backsql_db_config (%s line %d): "
+ "missing arg "
+ "in \"aliasing_keyword <string>\" directive\n",
+ fname, lineno, 0 );
+ return 1;
+ }
+
+ if ( ! BER_BVISNULL( &bi->sql_aliasing ) ) {
+ ch_free( bi->sql_aliasing.bv_val );
+ }
+
+ ber_str2bv( argv[ 1 ], strlen( argv[ 1 ] ) + 1, 1,
+ &bi->sql_aliasing );
+ /* add a trailing space... */
+ bi->sql_aliasing.bv_val[ bi->sql_aliasing.bv_len - 1] = ' ';
+
+ } else if ( !strcasecmp( argv[ 0 ], "aliasing_quote" ) ) {
+ if ( argc != 2 ) {
+ Debug( LDAP_DEBUG_TRACE,
+ "<==backsql_db_config (%s line %d): "
+ "missing arg "
+ "in \"aliasing_quote <string>\" directive\n",
+ fname, lineno, 0 );
+ return 1;
+ }
+
+ if ( ! BER_BVISNULL( &bi->sql_aliasing_quote ) ) {
+ ch_free( bi->sql_aliasing_quote.bv_val );
+ }
+
+ ber_str2bv( argv[ 1 ], 0, 1, &bi->sql_aliasing_quote );
+
+ } else if ( !strcasecmp( argv[ 0 ], "autocommit" ) ) {
+ if ( argc != 2 ) {
+ Debug( LDAP_DEBUG_TRACE,
+ "<==backsql_db_config (%s line %d): "
+ "missing arg "
+ "in \"autocommit {NO|yes}\" directive\n",
+ fname, lineno, 0 );
+ return 1;
+ }
+
+ if ( !strcasecmp( argv[ 1 ], "yes" ) ||
+ !strcasecmp( argv[ 1 ], "TRUE" ) ||
+ !strcasecmp( argv[ 1 ], "on" ) )
+ {
+ bi->sql_flags |= BSQLF_AUTOCOMMIT_ON;
+
+ } else if ( !strcasecmp( argv[ 1 ], "no" ) ||
+ !strcasecmp( argv[ 1 ], "FALSE" ) ||
+ !strcasecmp( argv[ 1 ], "off" ) )
+ {
+ bi->sql_flags &= ~BSQLF_AUTOCOMMIT_ON;
+
+ } else {
+ Debug( LDAP_DEBUG_TRACE,
+ "<==backsql_db_config (%s line %d): "
+ "invalid arg "
+ "in \"autocommit {NO|yes}\" directive\n",
+ fname, lineno, 0 );
+ return 1;
+ }