From 103655d67086a3377668236662363fa3146fbd32 Mon Sep 17 00:00:00 2001 From: Daniele Varrazzo Date: Wed, 15 Mar 2017 16:04:45 +0000 Subject: [PATCH] Password scrubbing refactored in a separate function --- psycopg/connection_type.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/psycopg/connection_type.c b/psycopg/connection_type.c index 26100b23..53e9e0ff 100644 --- a/psycopg/connection_type.c +++ b/psycopg/connection_type.c @@ -1248,10 +1248,25 @@ static struct PyGetSetDef connectionObject_getsets[] = { /* initialization and finalization methods */ +static void +obscure_password(connectionObject *conn) +{ + char *pos; + + if (!conn || !conn->dsn) { + return; + } + + pos = strstr(conn->dsn, "password"); + if (pos != NULL) { + for (pos = pos+9 ; *pos != '\0' && *pos != ' '; pos++) + *pos = 'x'; + } +} + static int connection_setup(connectionObject *self, const char *dsn, long int async) { - char *pos; int res = -1; Dprintf("connection_setup: init connection object at %p, " @@ -1288,15 +1303,11 @@ connection_setup(connectionObject *self, const char *dsn, long int async) exit: /* here we obfuscate the password even if there was a connection error */ - pos = strstr(self->dsn, "password"); - if (pos != NULL) { - for (pos = pos+9 ; *pos != '\0' && *pos != ' '; pos++) - *pos = 'x'; - } - + obscure_password(self); return res; } + static int connection_clear(connectionObject *self) {