X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-sql%2Futil.c;h=f0569bf2d044133ac89b4631f354e353b2161c65;hb=72e319bd02256465a0e8c8a2bc304ec11de97378;hp=4bb276f0f2d620fb5ee8909bd6a3b9b52eab5db1;hpb=81ecb0b1536785c830a264243c969e03a3858af6;p=openldap diff --git a/servers/slapd/back-sql/util.c b/servers/slapd/back-sql/util.c index 4bb276f0f2..f0569bf2d0 100644 --- a/servers/slapd/back-sql/util.c +++ b/servers/slapd/back-sql/util.c @@ -1,7 +1,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1999-2005 The OpenLDAP Foundation. + * Copyright 1999-2009 The OpenLDAP Foundation. * Portions Copyright 1999 Dmitry Kovalev. * Portions Copyright 2002 Pierangelo Masarati. * All rights reserved. @@ -37,35 +37,35 @@ #define BACKSQL_STR_GROW 256 -char backsql_def_oc_query[] = +const char backsql_def_oc_query[] = "SELECT id,name,keytbl,keycol,create_proc,delete_proc,expect_return " "FROM ldap_oc_mappings"; -char backsql_def_needs_select_oc_query[] = +const char backsql_def_needs_select_oc_query[] = "SELECT id,name,keytbl,keycol,create_proc,create_keyval,delete_proc," "expect_return FROM ldap_oc_mappings"; -char backsql_def_at_query[] = +const char backsql_def_at_query[] = "SELECT name,sel_expr,from_tbls,join_where,add_proc,delete_proc," "param_order,expect_return,sel_expr_u FROM ldap_attr_mappings " "WHERE oc_map_id=?"; -char backsql_def_delentry_stmt[] = "DELETE FROM ldap_entries WHERE id=?"; -char backsql_def_renentry_stmt[] = +const char backsql_def_delentry_stmt[] = "DELETE FROM ldap_entries WHERE id=?"; +const char backsql_def_renentry_stmt[] = "UPDATE ldap_entries SET dn=?,parent=?,keyval=? WHERE id=?"; -char backsql_def_insentry_stmt[] = +const char backsql_def_insentry_stmt[] = "INSERT INTO ldap_entries (dn,oc_map_id,parent,keyval) " "VALUES (?,?,?,?)"; -char backsql_def_delobjclasses_stmt[] = "DELETE FROM ldap_entry_objclasses " +const char backsql_def_delobjclasses_stmt[] = "DELETE FROM ldap_entry_objclasses " "WHERE entry_id=?"; -char backsql_def_subtree_cond[] = "ldap_entries.dn LIKE CONCAT('%',?)"; -char backsql_def_upper_subtree_cond[] = "(ldap_entries.dn) LIKE CONCAT('%',?)"; -char backsql_id_query[] = "SELECT id,keyval,oc_map_id,dn FROM ldap_entries WHERE "; +const char backsql_def_subtree_cond[] = "ldap_entries.dn LIKE CONCAT('%',?)"; +const char backsql_def_upper_subtree_cond[] = "(ldap_entries.dn) LIKE CONCAT('%',?)"; +const char backsql_id_query[] = "SELECT id,keyval,oc_map_id,dn FROM ldap_entries WHERE "; /* better ?||? or cast(?||? as varchar) */ -char backsql_def_concat_func[] = "CONCAT(?,?)"; +const char backsql_def_concat_func[] = "CONCAT(?,?)"; /* TimesTen */ -char backsql_check_dn_ru_query[] = "SELECT dn_ru FROM ldap_entries"; +const char backsql_check_dn_ru_query[] = "SELECT dn_ru FROM ldap_entries"; struct berbuf * -backsql_strcat( struct berbuf *dest, ... ) +backsql_strcat_x( struct berbuf *dest, void *memctx, ... ) { va_list strs; ber_len_t cdlen, cslen, grow; @@ -79,10 +79,9 @@ backsql_strcat( struct berbuf *dest, ... ) Debug( LDAP_DEBUG_TRACE, "==>backsql_strcat()\n", 0, 0, 0 ); #endif /* BACKSQL_TRACE */ - va_start( strs, dest ); + va_start( strs, memctx ); if ( dest->bb_val.bv_val == NULL || dest->bb_len == 0 ) { - dest->bb_val.bv_val = (char *)ch_calloc( BACKSQL_STR_GROW, - sizeof( char ) ); + dest->bb_val.bv_val = (char *)ber_memalloc_x( BACKSQL_STR_GROW * sizeof( char ), memctx ); dest->bb_val.bv_len = 0; dest->bb_len = BACKSQL_STR_GROW; } @@ -100,8 +99,8 @@ backsql_strcat( struct berbuf *dest, ... ) dest->bb_len, cdlen + 1, cslen ); #endif /* BACKSQL_TRACE */ - tmp_dest = (char *)ch_realloc( dest->bb_val.bv_val, - ( dest->bb_len ) + grow * sizeof( char ) ); + tmp_dest = (char *)ber_memrealloc_x( dest->bb_val.bv_val, + dest->bb_len + grow * sizeof( char ), memctx ); if ( tmp_dest == NULL ) { Debug( LDAP_DEBUG_ANY, "backsql_strcat(): " "could not reallocate string buffer.\n", @@ -133,7 +132,7 @@ backsql_strcat( struct berbuf *dest, ... ) } struct berbuf * -backsql_strfcat( struct berbuf *dest, const char *fmt, ... ) +backsql_strfcat_x( struct berbuf *dest, void *memctx, const char *fmt, ... ) { va_list strs; ber_len_t cdlen; @@ -150,8 +149,7 @@ backsql_strfcat( struct berbuf *dest, const char *fmt, ... ) va_start( strs, fmt ); if ( dest->bb_val.bv_val == NULL || dest->bb_len == 0 ) { - dest->bb_val.bv_val = (char *)ch_calloc( BACKSQL_STR_GROW, - sizeof( char ) ); + dest->bb_val.bv_val = (char *)ber_memalloc_x( BACKSQL_STR_GROW * sizeof( char ), memctx ); dest->bb_val.bv_len = 0; dest->bb_len = BACKSQL_STR_GROW; } @@ -208,8 +206,8 @@ backsql_strfcat( struct berbuf *dest, const char *fmt, ... ) dest->bb_len, cdlen + 1, cslen ); #endif /* BACKSQL_TRACE */ - tmp_dest = (char *)ch_realloc( dest->bb_val.bv_val, - ( dest->bb_len ) + grow * sizeof( char ) ); + tmp_dest = (char *)ber_memrealloc_x( dest->bb_val.bv_val, + ( dest->bb_len ) + grow * sizeof( char ), memctx ); if ( tmp_dest == NULL ) { Debug( LDAP_DEBUG_ANY, "backsql_strfcat(): " "could not reallocate string buffer.\n", @@ -254,7 +252,7 @@ backsql_entry_addattr( #ifdef BACKSQL_TRACE Debug( LDAP_DEBUG_TRACE, "backsql_entry_addattr(\"%s\"): %s=%s\n", - e->e_name.bv_val, ad->ad_cname->bv_val, val->bv_val ); + e->e_name.bv_val, ad->ad_cname.bv_val, val->bv_val ); #endif /* BACKSQL_TRACE */ rc = attr_merge_normalize_one( e, ad, val, memctx ); @@ -302,7 +300,7 @@ backsql_get_table_spec( backsql_info *bi, char **p ) BACKSQL_NEXT_WORD; /* table name */ - backsql_strcat( &res, s, NULL ); + backsql_strcat_x( &res, NULL, s, NULL ); s = q; BACKSQL_NEXT_WORD; @@ -312,7 +310,7 @@ backsql_get_table_spec( backsql_info *bi, char **p ) } /* oracle doesn't understand "AS" :( and other RDBMSes don't need it */ - backsql_strfcat( &res, "lbbsb", + backsql_strfcat_x( &res, NULL, "lbbsb", STRLENOF( " " ), " ", &bi->sql_aliasing, &bi->sql_aliasing_quote, @@ -353,13 +351,13 @@ backsql_merge_from_clause( "p=\"%s\" s=\"%s\"\n", p, s, 0 ); #endif /* BACKSQL_TRACE */ - if ( res.bb_val.bv_val == NULL ) { - backsql_strcat( &res, s, NULL ); + if ( BER_BVISNULL( &res.bb_val ) ) { + backsql_strcat_x( &res, NULL, s, NULL ); } else { pos = strstr( res.bb_val.bv_val, s ); if ( pos == NULL || ( ( e = pos[ strlen( s ) ] ) != '\0' && e != ',' ) ) { - backsql_strfcat( &res, "cs", ',', s ); + backsql_strfcat_x( &res, NULL, "cs", ',', s ); } } @@ -464,8 +462,8 @@ backsql_prepare_pattern( ch_free( bb.bb_val.bv_val ); return -1; } - backsql_strfcat( &bb, "b", &split_pattern[ i ] ); - backsql_strfcat( &bb, "b", &values[ i ] ); + backsql_strfcat_x( &bb, NULL, "b", &split_pattern[ i ] ); + backsql_strfcat_x( &bb, NULL, "b", &values[ i ] ); } if ( split_pattern[ i ].bv_val == NULL ) { @@ -473,7 +471,7 @@ backsql_prepare_pattern( return -1; } - backsql_strfcat( &bb, "b", &split_pattern[ i ] ); + backsql_strfcat_x( &bb, NULL, "b", &split_pattern[ i ] ); *res = bb.bb_val; @@ -522,9 +520,9 @@ backsql_entryUUID( /* note: works only with 32 bit architectures... */ snprintf( uuidbuf, sizeof( uuidbuf ), "%08x-%04x-%04x-0000-000000000000", - ( id->eid_oc_id & 0xFFFFFFFF ), - ( ( id->eid_keyval & 0xFFFF0000 ) >> 020 /* 16 */ ), - ( id->eid_keyval & 0xFFFF ) ); + ( (unsigned)id->eid_oc_id & 0xFFFFFFFF ), + ( ( (unsigned)id->eid_keyval & 0xFFFF0000 ) >> 020 /* 16 */ ), + ( (unsigned)id->eid_keyval & 0xFFFF ) ); #endif /* ! BACKSQL_ARBITRARY_KEY */ uuid.bv_val = uuidbuf; @@ -546,7 +544,9 @@ backsql_entryUUID_decode( #endif /* ! BACKSQL_ARBITRARY_KEY */ ) { +#if 0 fprintf( stderr, "==> backsql_entryUUID_decode()\n" ); +#endif *oc_id = ( entryUUID->bv_val[0] << 030 /* 24 */ ) + ( entryUUID->bv_val[1] << 020 /* 16 */ ) @@ -562,8 +562,10 @@ backsql_entryUUID_decode( + entryUUID->bv_val[7]; #endif /* ! BACKSQL_ARBITRARY_KEY */ +#if 0 fprintf( stderr, "<== backsql_entryUUID_decode(): oc=%lu id=%lu\n", *oc_id, *keyval ); +#endif return LDAP_SUCCESS; }