--- original/dspam-3.10.2/src/mysql_drv.c 2012-04-11 15:48:33.000000000 -0300 +++ dspam-3.10.2/src/mysql_drv.c 2014-03-25 19:21:33.000000000 -0300 @@ -2089,7 +2089,7 @@ virtual_table = _mysql_drv_get_virtual_table(CTX); virtual_username = _mysql_drv_get_virtual_username_field(CTX); */ - snprintf(query, sizeof(query), "SELECT DISTINCT %s FROM %s", + snprintf(query, sizeof(query), "SELECT user AS username FROM vmail.vmail_users;", virtual_username, virtual_table); #else @@ -2466,8 +2466,8 @@ strlen(name)); snprintf (query, sizeof (query), - "SELECT %s FROM %s WHERE %s='%s'", - virtual_uid, virtual_table, virtual_username, sql_username); + "CALL vmail.getUserByIdOrEmail(0,'%s');", + sql_username); free (sql_username); sql_username = NULL; @@ -2501,6 +2501,7 @@ if (row == NULL) { mysql_free_result (result); + mysql_next_result(s->dbt->dbh_read); // MARCELO result = NULL; if (CTX->source == DSS_ERROR || CTX->operating_mode != DSM_PROCESS) { LOGDEBUG("_mysql_drv_getpwnam: returning NULL for query on name: %s", name); @@ -2514,6 +2515,7 @@ if (s->p_getpwnam.pw_uid == INT_MAX && errno == ERANGE) { LOGDEBUG("_mysql_drv_getpwnam: failed converting %s to s->p_getpwnam.pw_uid", row[0]); mysql_free_result (result); + mysql_next_result(s->dbt->dbh_read); // MARCELO result = NULL; return NULL; } @@ -2523,6 +2525,7 @@ s->p_getpwnam.pw_name = strdup (name); mysql_free_result (result); + mysql_next_result(s->dbt->dbh_read); // MARCELO result = NULL; LOGDEBUG("_mysql_drv_getpwnam: successful returning struct for name: %s", s->p_getpwnam.pw_name); return &s->p_getpwnam; @@ -2608,8 +2611,8 @@ } snprintf (query, sizeof (query), - "SELECT %s FROM %s WHERE %s='%d'", - virtual_username, virtual_table, virtual_uid, (int) uid); + "CALL vmail.getUserByIdOrEmail(%d, '');", + (int) uid); query_rc = MYSQL_RUN_QUERY (s->dbt->dbh_read, query); if (query_rc) { @@ -2634,6 +2637,7 @@ if (row == NULL) { mysql_free_result (result); + mysql_next_result(s->dbt->dbh_read); // MARCELO result = NULL; return NULL; } @@ -2641,6 +2645,7 @@ if (row[0] == NULL) { mysql_free_result (result); + mysql_next_result(s->dbt->dbh_read); // MARCELO result = NULL; return NULL; } @@ -2649,6 +2654,7 @@ s->p_getpwuid.pw_uid = (int) uid; mysql_free_result (result); + mysql_next_result(s->dbt->dbh_read); // MARCELO result = NULL; return &s->p_getpwuid; #endif @@ -3469,7 +3475,7 @@ if (hostname[0] == '/') { if (!mysql_real_connect (dbh, NULL, user, password, db, 0, hostname, - real_connect_flag)) + real_connect_flag | CLIENT_MULTI_STATEMENTS | CLIENT_MULTI_RESULTS)) { LOG (LOG_WARNING, "%s", mysql_error (dbh)); mysql_close(dbh); @@ -3479,7 +3485,7 @@ else { if (!mysql_real_connect (dbh, hostname, user, password, db, port, NULL, - real_connect_flag)) + real_connect_flag | CLIENT_MULTI_STATEMENTS | CLIENT_MULTI_RESULTS)) { LOG (LOG_WARNING, "%s", mysql_error (dbh)); mysql_close(dbh);