bool set_pool(PgSocket *client, const char *dbname, const char *username, const char *password, bool takeover)
{
+ Assert((password && takeover) || (!password && !takeover));
+
/* find database */
client->db = find_database(dbname);
if (!client->db) {
slog_info(client, "login failed: db=%s user=%s", dbname, username);
return false;
}
- if (strlen(password) >= MAX_PASSWORD) {
+ if (password && strlen(password) >= MAX_PASSWORD) {
disconnect_client(client, true, "password too long");
if (cf_log_connections)
slog_info(client, "login failed: db=%s user=%s", dbname, username);
}
/* find pool */
- return set_pool(client, dbname, username, "", false);
+ return set_pool(client, dbname, username, NULL, false);
}
static bool scram_client_first(PgSocket *client, uint32_t datalen, const uint8_t *data)
aatree_insert(&pam_user_tree, (uintptr_t)user->name, &user->tree_node);
user->pool_mode = POOL_INHERIT;
}
- safe_strcpy(user->passwd, passwd, sizeof(user->passwd));
+ if (passwd)
+ safe_strcpy(user->passwd, passwd, sizeof(user->passwd));
return user;
}