X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=src%2Fsrc%2Flookups%2Fpgsql.c;h=b5f60938e7946dba99b20504f80c01c216d32155;hb=b09c17939112f84e689a9c1343f00ca84610325d;hp=697285ab951e79794f47bbbcc0684795cd3d273c;hpb=f9ba5e2255cf18092750fffacb6a9603571a2be5;p=exim.git diff --git a/src/src/lookups/pgsql.c b/src/src/lookups/pgsql.c index 697285ab9..b5f60938e 100644 --- a/src/src/lookups/pgsql.c +++ b/src/src/lookups/pgsql.c @@ -53,7 +53,7 @@ pgsql_connection *cn; while ((cn = pgsql_connections) != NULL) { pgsql_connections = cn->next; - DEBUG(D_lookup) debug_printf("close PGSQL connection: %s\n", cn->server); + DEBUG(D_lookup) debug_printf_indent("close PGSQL connection: %s\n", cn->server); PQfinish(cn->handle); } } @@ -77,7 +77,7 @@ static void notice_processor(void *arg, const char *message) { arg = arg; /* Keep compiler happy */ -DEBUG(D_lookup) debug_printf("PGSQL: %s\n", message); +DEBUG(D_lookup) debug_printf_indent("PGSQL: %s\n", message); } @@ -124,11 +124,11 @@ perform_pgsql_search(const uschar *query, uschar *server, uschar **resultptr, PGconn *pg_conn = NULL; PGresult *pg_result = NULL; -int i; gstring * result = NULL; int yield = DEFER; unsigned int num_fields, num_tuples; pgsql_connection *cn; +rmark reset_point = store_mark(); uschar *server_copy = NULL; uschar *sdata[3]; @@ -137,7 +137,7 @@ path, 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 = 2; i >= 0; i--) +for (int i = 2; i >= 0; i--) { uschar *pp = Ustrrchr(server, '/'); if (!pp) @@ -182,7 +182,7 @@ if (!cn) last_slash = Ustrrchr(server, '/'); last_dot = Ustrrchr(server, '.'); - DEBUG(D_lookup) debug_printf("PGSQL new connection: socket=%s " + DEBUG(D_lookup) debug_printf_indent("PGSQL new connection: socket=%s " "database=%s user=%s\n", server, sdata[0], sdata[1]); /* A valid socket name looks like this: /var/run/postgresql/.s.PGSQL.5432 @@ -222,7 +222,7 @@ if (!cn) return DEFER; } - DEBUG(D_lookup) debug_printf("PGSQL new connection: host=%s port=%s " + DEBUG(D_lookup) debug_printf_indent("PGSQL new connection: host=%s port=%s " "database=%s user=%s\n", server, port, sdata[0], sdata[1]); } @@ -239,7 +239,7 @@ if (!cn) if(PQstatus(pg_conn) == CONNECTION_BAD) { - store_reset(server_copy); + reset_point = store_reset(reset_point); *errmsg = string_sprintf("PGSQL connection failed: %s", PQerrorMessage(pg_conn)); PQfinish(pg_conn); @@ -260,7 +260,7 @@ if (!cn) /* Add the connection to the cache */ - cn = store_get(sizeof(pgsql_connection)); + cn = store_get(sizeof(pgsql_connection), FALSE); cn->server = server_copy; cn->handle = pg_conn; cn->next = pgsql_connections; @@ -271,7 +271,7 @@ if (!cn) else { - DEBUG(D_lookup) debug_printf("PGSQL using cached connection for %s\n", + DEBUG(D_lookup) debug_printf_indent("PGSQL using cached connection for %s\n", server_copy); } @@ -289,7 +289,7 @@ switch(PQresultStatus(pg_result)) result = string_cat(result, US PQcmdTuples(pg_result)); *do_cache = 0; - DEBUG(D_lookup) debug_printf("PGSQL: command does not return any data " + DEBUG(D_lookup) debug_printf_indent("PGSQL: command does not return any data " "but was successful. Rows affected: %s\n", string_from_gstring(result)); break; @@ -320,7 +320,7 @@ num_tuples = PQntuples(pg_result); /* Get the fields and construct the result string. If there is more than one row, we insert '\n' between them. */ -for (i = 0; i < num_tuples; i++) +for (int i = 0; i < num_tuples; i++) { if (result) result = string_catn(result, US"\n", 1); @@ -329,14 +329,11 @@ for (i = 0; i < num_tuples; i++) result = string_catn(result, US PQgetvalue(pg_result, i, 0), PQgetlength(pg_result, i, 0)); else - { - int j; - for (j = 0; j < num_fields; j++) + for (int j = 0; j < num_fields; j++) { uschar *tmp = US PQgetvalue(pg_result, i, j); result = lf_quote(US PQfname(pg_result, j), tmp, Ustrlen(tmp), result); } - } } /* If result is NULL then no data has been found and so we return FAIL. */ @@ -360,13 +357,13 @@ if (pg_result) PQclear(pg_result); if (result) { - store_reset(result->s + result->ptr + 1); + gstring_release_unused(result); *resultptr = string_from_gstring(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 */ } } @@ -431,7 +428,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) {