X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fcats%2Fmysql.c;h=c25d18c7830849fca9ac840d297dc515d2a090ad;hb=fb71554fa28e81b6125c2063e028976df18334f2;hp=5124dd2a90d2dcad234a445ec778c10aa7aa4d71;hpb=47ca4e46d0d43444e0490b5a5e61dd8908e0822e;p=bacula%2Fbacula diff --git a/bacula/src/cats/mysql.c b/bacula/src/cats/mysql.c index 5124dd2a90..c25d18c783 100644 --- a/bacula/src/cats/mysql.c +++ b/bacula/src/cats/mysql.c @@ -6,7 +6,7 @@ The main author of Bacula is Kern Sibbald, with contributions from many others, a complete list can be found in the file AUTHORS. This program is Free Software; you can redistribute it and/or - modify it under the terms of version two of the GNU General Public + modify it under the terms of version three of the GNU Affero General Public License as published by the Free Software Foundation and included in the file LICENSE. @@ -15,7 +15,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License + You should have received a copy of the GNU Affero General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. @@ -100,7 +100,6 @@ db_init_database(JCR *jcr, const char *db_name, const char *db_user, const char } } } - db_check_backend_thread_safe(); Dmsg0(100, "db_open first time\n"); mdb = (B_DB *)malloc(sizeof(B_DB)); memset(mdb, 0, sizeof(B_DB)); @@ -126,6 +125,7 @@ db_init_database(JCR *jcr, const char *db_name, const char *db_user, const char mdb->path = get_pool_memory(PM_FNAME); mdb->esc_name = get_pool_memory(PM_FNAME); mdb->esc_path = get_pool_memory(PM_FNAME); + mdb->esc_obj = get_pool_memory(PM_FNAME); mdb->allow_transactions = mult_db_connections; db_list->append(mdb); /* put db in list */ Dmsg3(100, "initdb ref=%d connected=%d db=%p\n", mdb->ref_count, @@ -254,6 +254,7 @@ db_close_database(JCR *jcr, B_DB *mdb) free_pool_memory(mdb->path); free_pool_memory(mdb->esc_name); free_pool_memory(mdb->esc_path); + free_pool_memory(mdb->esc_obj); if (mdb->db_name) { free(mdb->db_name); } @@ -316,6 +317,36 @@ int db_next_index(JCR *jcr, B_DB *mdb, char *table, char *index) return 1; } +/* + * Escape binary object so that MySQL is happy + * Memory is stored in B_DB struct, no need to free it + */ +char * +db_escape_object(JCR *jcr, B_DB *mdb, char *old, int len) +{ + mdb->esc_obj = check_pool_memory_size(mdb->esc_obj, len*2+1); + mysql_real_escape_string(mdb->db, mdb->esc_obj, old, len); + return mdb->esc_obj; +} + +/* + * Unescape binary object so that MySQL is happy + */ +void +db_unescape_object(JCR *jcr, B_DB *db, + char *from, int32_t expected_len, + POOLMEM **dest, int32_t *dest_len) +{ + if (!from) { + *dest[0] = 0; + *dest_len = 0; + return; + } + *dest = check_pool_memory_size(*dest, expected_len+1); + *dest_len = expected_len; + memcpy(*dest, from, expected_len); + (*dest)[expected_len]=0; +} /* * Escape strings so that MySQL is happy @@ -380,7 +411,7 @@ void my_mysql_free_result(B_DB *mdb) db_unlock(mdb); } -int my_mysql_sql_insert_id(B_DB *mdb, const char *query, const char *table_name) +int my_mysql_insert_autokey_record(B_DB *mdb, const char *query, const char *table_name) { /* * First execute the insert query and then retrieve the currval.