X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/ba0e37b13c652435898f9b1050d6fe648875b125..d447dbd160a0fb503ed1e763f3f23d28744b6ddd:/src/src/lookups/mysql.c diff --git a/src/src/lookups/mysql.c b/src/src/lookups/mysql.c index 8d101b27b..745c6505c 100644 --- a/src/src/lookups/mysql.c +++ b/src/src/lookups/mysql.c @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2017 */ +/* Copyright (c) University of Cambridge 1995 - 2018 */ /* See the file NOTICE for conditions of use and distribution. */ /* Thanks to Paul Kelly for contributing the original code for these @@ -81,7 +81,7 @@ static mysql_connection *mysql_connections = NULL; /* See local README for interface description. */ static void * -mysql_open(uschar *filename, uschar **errmsg) +mysql_open(const uschar * filename, uschar ** errmsg) { return (void *)(1); /* Just return something non-null */ } @@ -101,7 +101,7 @@ mysql_connection *cn; while ((cn = mysql_connections) != NULL) { mysql_connections = cn->next; - DEBUG(D_lookup) debug_printf("close MYSQL connection: %s\n", cn->server); + DEBUG(D_lookup) debug_printf_indent("close MYSQL connection: %s\n", cn->server); mysql_close(cn->handle); } } @@ -152,7 +152,7 @@ database, user, password. We can write to the string, since it is in a nextinlist temporary buffer. The copy of the string that is used for caching has the password removed. This copy is also used for debugging output. */ -for (i = 3; i > 0; i--) +for (int i = 3; i > 0; i--) { uschar *pp = Ustrrchr(server, '/'); if (pp == NULL) @@ -227,12 +227,12 @@ if (!cn) if (sdata[1][0] == 0) sdata[1] = NULL; DEBUG(D_lookup) - debug_printf("MYSQL new connection: host=%s port=%d socket=%s " + debug_printf_indent("MYSQL new connection: host=%s port=%d socket=%s " "database=%s user=%s\n", sdata[0], port, socket, sdata[1], sdata[2]); /* Get store for a new handle, initialize it, and connect to the server */ - mysql_handle = store_get(sizeof(MYSQL)); + mysql_handle = store_get(sizeof(MYSQL), FALSE); mysql_init(mysql_handle); mysql_options(mysql_handle, MYSQL_READ_DEFAULT_GROUP, CS group); if (mysql_real_connect(mysql_handle, @@ -248,7 +248,7 @@ if (!cn) /* Add the connection to the cache */ - cn = store_get(sizeof(mysql_connection)); + cn = store_get(sizeof(mysql_connection), FALSE); cn->server = server_copy; cn->handle = mysql_handle; cn->next = mysql_connections; @@ -260,7 +260,7 @@ if (!cn) else { DEBUG(D_lookup) - debug_printf("MYSQL using cached connection for %s\n", server_copy); + debug_printf_indent("MYSQL using cached connection for %s\n", server_copy); } /* Run the query */ @@ -285,7 +285,7 @@ if (!(mysql_result = mysql_use_result(mysql_handle))) { if ( mysql_field_count(mysql_handle) == 0 ) { - DEBUG(D_lookup) debug_printf("MYSQL: query was not one that returns data\n"); + DEBUG(D_lookup) debug_printf_indent("MYSQL: query was not one that returns data\n"); result = string_cat(result, string_sprintf("%d", mysql_affected_rows(mysql_handle))); *do_cache = 0; @@ -315,7 +315,7 @@ while ((mysql_row_data = mysql_fetch_row(mysql_result))) result = string_catn(result, US"\n", 1); if (num_fields != 1) - for (i = 0; i < num_fields; i++) + for (int i = 0; i < num_fields; i++) result = lf_quote(US fields[i].name, US mysql_row_data[i], lengths[i], result); @@ -331,7 +331,7 @@ while((i = mysql_next_result(mysql_handle)) >= 0) { if(i == 0) /* Just ignore more results */ { - DEBUG(D_lookup) debug_printf("MYSQL: got unexpected more results\n"); + DEBUG(D_lookup) debug_printf_indent("MYSQL: got unexpected more results\n"); continue; } @@ -366,12 +366,12 @@ if (mysql_result) mysql_free_result(mysql_result); if (result) { *resultptr = string_from_gstring(result); - store_reset(result->s + (result->size = result->ptr + 1)); + gstring_release_unused(result); return OK; } else { - DEBUG(D_lookup) debug_printf("%s\n", *errmsg); + DEBUG(D_lookup) debug_printf_indent("%s\n", *errmsg); return yield; /* FAIL or DEFER */ } } @@ -389,8 +389,8 @@ query is deferred with a retryable error is now in a separate function that is shared with other SQL lookups. */ static int -mysql_find(void *handle, uschar *filename, const uschar *query, int length, - uschar **result, uschar **errmsg, uint *do_cache) +mysql_find(void * handle, const uschar * filename, const uschar * query, + int length, uschar ** result, uschar ** errmsg, uint * do_cache) { return lf_sqlperform(US"MySQL", US"mysql_servers", mysql_servers, query, result, errmsg, do_cache, perform_mysql_search); @@ -432,7 +432,7 @@ while ((c = *t++) != 0) if (Ustrchr("\n\t\r\b\'\"\\", c) != NULL) count++; if (count == 0) return s; -t = quoted = store_get(Ustrlen(s) + count + 1); +t = quoted = store_get(Ustrlen(s) + count + 1, is_tainted(s)); while ((c = *s++) != 0) {