⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 init.c

📁 OpenLdap是LDAP的开源项目
💻 C
📖 第 1 页 / 共 2 页
字号:
		if ( BER_BVISNULL( &bi->sql_subtree_cond ) ) {		/*		 * Prepare concat function for subtree search condition		 */		struct berval	concat;		struct berval	values[] = {			BER_BVC( "'%'" ),			BER_BVC( "?" ),			BER_BVNULL		};		struct berbuf	bb = BB_NULL;		if ( backsql_prepare_pattern( bi->sql_concat_func, values, 				&concat ) ) {			Debug( LDAP_DEBUG_TRACE, "backsql_db_open(): "				"unable to prepare CONCAT pattern", 0, 0, 0 );			return 1;		}					Debug( LDAP_DEBUG_TRACE, "backsql_db_open(): "			"subtree search SQL condition not specified "			"(use \"subtree_cond\" directive in slapd.conf)\n", 			0, 0, 0);		if ( bi->sql_upper_func.bv_val ) {			/*			 * UPPER(ldap_entries.dn) LIKE UPPER(CONCAT('%',?))			 */			backsql_strfcat_x( &bb, NULL, "blbbb",					&bi->sql_upper_func,					(ber_len_t)STRLENOF( "(ldap_entries.dn) LIKE " ),						"(ldap_entries.dn) LIKE ",					&bi->sql_upper_func_open,					&concat,					&bi->sql_upper_func_close );		} else {			/*			 * ldap_entries.dn LIKE CONCAT('%',?)			 */			backsql_strfcat_x( &bb, NULL, "lb",					(ber_len_t)STRLENOF( "ldap_entries.dn LIKE " ),						"ldap_entries.dn LIKE ",					&concat );		}		ch_free( concat.bv_val );		bi->sql_subtree_cond = bb.bb_val;					Debug( LDAP_DEBUG_TRACE, "backsql_db_open(): "			"setting \"%s\" as default\n",			bi->sql_subtree_cond.bv_val, 0, 0 );	}	if ( bi->sql_children_cond.bv_val == NULL ) {		struct berbuf	bb = BB_NULL;		if ( bi->sql_upper_func.bv_val ) {			/*			 * UPPER(ldap_entries.dn) LIKE UPPER(CONCAT('%,',?))			 */			backsql_strfcat_x( &bb, NULL, "blbl",					&bi->sql_upper_func,					(ber_len_t)STRLENOF( "(ldap_entries.dn)=" ),						"(ldap_entries.dn)=",					&bi->sql_upper_func,					(ber_len_t)STRLENOF( "(?)" ), "(?)" );		} else {			/*			 * ldap_entries.dn LIKE CONCAT('%,',?)			 */			backsql_strfcat_x( &bb, NULL, "l",					(ber_len_t)STRLENOF( "ldap_entries.dn=?" ),						"ldap_entries.dn=?");		}		bi->sql_children_cond = bb.bb_val;					Debug( LDAP_DEBUG_TRACE, "backsql_db_open(): "			"setting \"%s\" as default\n",			bi->sql_children_cond.bv_val, 0, 0 );	}	if ( bi->sql_oc_query == NULL ) {		if ( BACKSQL_CREATE_NEEDS_SELECT( bi ) ) {			bi->sql_oc_query =				ch_strdup( backsql_def_needs_select_oc_query );		} else {			bi->sql_oc_query = ch_strdup( backsql_def_oc_query );		}		Debug( LDAP_DEBUG_TRACE, "backsql_db_open(): "			"objectclass mapping SQL statement not specified "			"(use \"oc_query\" directive in slapd.conf)\n", 			0, 0, 0 );		Debug( LDAP_DEBUG_TRACE, "backsql_db_open(): "			"setting \"%s\" by default\n", bi->sql_oc_query, 0, 0 );	}		if ( bi->sql_at_query == NULL ) {		Debug( LDAP_DEBUG_TRACE, "backsql_db_open(): "			"attribute mapping SQL statement not specified "			"(use \"at_query\" directive in slapd.conf)\n",			0, 0, 0 );		Debug(LDAP_DEBUG_TRACE, "backsql_db_open(): "			"setting \"%s\" by default\n",			backsql_def_at_query, 0, 0 );		bi->sql_at_query = ch_strdup( backsql_def_at_query );	}		if ( bi->sql_insentry_stmt == NULL ) {		Debug( LDAP_DEBUG_TRACE, "backsql_db_open(): "			"entry insertion SQL statement not specified "			"(use \"insentry_stmt\" directive in slapd.conf)\n",			0, 0, 0 );		Debug(LDAP_DEBUG_TRACE, "backsql_db_open(): "			"setting \"%s\" by default\n",			backsql_def_insentry_stmt, 0, 0 );		bi->sql_insentry_stmt = ch_strdup( backsql_def_insentry_stmt );	}		if ( bi->sql_delentry_stmt == NULL ) {		Debug( LDAP_DEBUG_TRACE, "backsql_db_open(): "			"entry deletion SQL statement not specified "			"(use \"delentry_stmt\" directive in slapd.conf)\n",			0, 0, 0 );		Debug( LDAP_DEBUG_TRACE, "backsql_db_open(): "			"setting \"%s\" by default\n",			backsql_def_delentry_stmt, 0, 0 );		bi->sql_delentry_stmt = ch_strdup( backsql_def_delentry_stmt );	}	if ( bi->sql_renentry_stmt == NULL ) {		Debug( LDAP_DEBUG_TRACE, "backsql_db_open(): "			"entry deletion SQL statement not specified "			"(use \"renentry_stmt\" directive in slapd.conf)\n",			0, 0, 0 );		Debug( LDAP_DEBUG_TRACE, "backsql_db_open(): "			"setting \"%s\" by default\n",			backsql_def_renentry_stmt, 0, 0 );		bi->sql_renentry_stmt = ch_strdup( backsql_def_renentry_stmt );	}	if ( bi->sql_delobjclasses_stmt == NULL ) {		Debug( LDAP_DEBUG_TRACE, "backsql_db_open(): "			"objclasses deletion SQL statement not specified "			"(use \"delobjclasses_stmt\" directive in slapd.conf)\n",			0, 0, 0 );		Debug( LDAP_DEBUG_TRACE, "backsql_db_open(): "			"setting \"%s\" by default\n",			backsql_def_delobjclasses_stmt, 0, 0 );		bi->sql_delobjclasses_stmt = ch_strdup( backsql_def_delobjclasses_stmt );	}	/* This should just be to force schema loading */	op->o_hdr = (Opheader *)&op[ 1 ];	op->o_connid = (unsigned long)(-1);	op->o_bd = bd;	if ( backsql_get_db_conn( op, &dbh ) != LDAP_SUCCESS ) {		Debug( LDAP_DEBUG_TRACE, "backsql_db_open(): "			"connection failed, exiting\n", 0, 0, 0 );		return 1;	}	if ( backsql_load_schema_map( bi, dbh ) != LDAP_SUCCESS ) {		Debug( LDAP_DEBUG_TRACE, "backsql_db_open(): "			"schema mapping failed, exiting\n", 0, 0, 0 );		return 1;	}	if ( backsql_free_db_conn( op ) != SQL_SUCCESS ) {		Debug( LDAP_DEBUG_TRACE, "backsql_db_open(): "			"connection free failed\n", 0, 0, 0 );	}	if ( !BACKSQL_SCHEMA_LOADED( bi ) ) {		Debug( LDAP_DEBUG_TRACE, "backsql_db_open(): "			"test failed, schema map not loaded - exiting\n",			0, 0, 0 );		return 1;	}	/*	 * Prepare ID selection query	 */	if ( bi->sql_id_query == NULL ) {		/* no custom id_query provided */		if ( bi->sql_upper_func.bv_val == NULL ) {			backsql_strcat_x( &bb, NULL, backsql_id_query, "dn=?", NULL );		} else {			if ( BACKSQL_HAS_LDAPINFO_DN_RU( bi ) ) {				backsql_strcat_x( &bb, NULL, backsql_id_query,						"dn_ru=?", NULL );			} else {				if ( BACKSQL_USE_REVERSE_DN( bi ) ) {					backsql_strfcat_x( &bb, NULL, "sbl",							backsql_id_query,							&bi->sql_upper_func, 							(ber_len_t)STRLENOF( "(dn)=?" ), "(dn)=?" );				} else {					backsql_strfcat_x( &bb, NULL, "sblbcb",							backsql_id_query,							&bi->sql_upper_func, 							(ber_len_t)STRLENOF( "(dn)=" ), "(dn)=",							&bi->sql_upper_func_open, 							'?', 							&bi->sql_upper_func_close );				}			}		}		bi->sql_id_query = bb.bb_val.bv_val;	}	/*	 * Prepare children ID selection query	 */	BER_BVZERO( &bb.bb_val );	bb.bb_len = 0;	backsql_strfcat_x( &bb, NULL, "sbsb",			"SELECT COUNT(distinct subordinates.id) "			"FROM ldap_entries,ldap_entries ",			&bi->sql_aliasing, "subordinates "			"WHERE subordinates.parent=ldap_entries.id AND ",			&bi->sql_children_cond );	bi->sql_has_children_query = bb.bb_val.bv_val; 	/*	 * Prepare DN and objectClass aliasing bit of query	 */	BER_BVZERO( &bb.bb_val );	bb.bb_len = 0;	backsql_strfcat_x( &bb, NULL, "sbbsbsbbsb",			" ", &bi->sql_aliasing, &bi->sql_aliasing_quote,			"objectClass", &bi->sql_aliasing_quote,			",ldap_entries.dn ", &bi->sql_aliasing,			&bi->sql_aliasing_quote, "dn", &bi->sql_aliasing_quote );	bi->sql_dn_oc_aliasing = bb.bb_val; 	/* should never happen! */	assert( bd->be_nsuffix != NULL );		if ( BER_BVISNULL( &bd->be_nsuffix[ 1 ] ) ) {		/* enable if only one suffix is defined */		bi->sql_flags |= BSQLF_USE_SUBTREE_SHORTCUT;	}	bi->sql_flags |= BSQLF_CHECK_SCHEMA;		Debug( LDAP_DEBUG_TRACE, "<==backsql_db_open(): "		"test succeeded, schema map loaded\n", 0, 0, 0 );	return 0;}intbacksql_db_close(	BackendDB	*bd ){	backsql_info 	*bi = (backsql_info*)bd->be_private;	Debug( LDAP_DEBUG_TRACE, "==>backsql_db_close()\n", 0, 0, 0 );	backsql_conn_destroy( bi );	Debug( LDAP_DEBUG_TRACE, "<==backsql_db_close()\n", 0, 0, 0 );	return 0;}intbacksql_connection_destroy( Backend *bd, Connection *c ){	OperationBuffer opbuf;	Operation*	op = (Operation *) &opbuf;	op->o_hdr = (Opheader *)&op[ 1 ];	op->o_connid = c->c_connid;	op->o_bd = bd;	Debug( LDAP_DEBUG_TRACE, "==>backsql_connection_destroy()\n", 0, 0, 0 );	backsql_free_db_conn( op );	Debug( LDAP_DEBUG_TRACE, "<==backsql_connection_destroy()\n", 0, 0, 0 );	return 0;}#if SLAPD_SQL == SLAPD_MOD_DYNAMIC/* conditionally define the init_module() function */SLAP_BACKEND_INIT_MODULE( sql )#endif /* SLAPD_SQL == SLAPD_MOD_DYNAMIC */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -