Commit e8d9caa4 authored by Thomas Munro's avatar Thomas Munro

Accept invalidation messages in InitializeSessionUserId().

If the authentication method modified the system catalogs through a
separate database connection (say, to create a new role on the fly),
make sure syscache sees the changes before we try to find the user.

Author: Thomas Munro
Reviewed-by: Tom Lane, Andres Freund
Discussion: https://postgr.es/m/CAEepm%3D3_h0_cgmz5PMyab4xk_OFrg6G5VCN%3DnF4chFXM9iFOqA%40mail.gmail.com
parent 387a5cfb
......@@ -48,6 +48,7 @@
#include "storage/procarray.h"
#include "utils/builtins.h"
#include "utils/guc.h"
#include "utils/inval.h"
#include "utils/memutils.h"
#include "utils/pidfile.h"
#include "utils/syscache.h"
......@@ -594,6 +595,13 @@ InitializeSessionUserId(const char *rolename, Oid roleid)
/* call only once */
AssertState(!OidIsValid(AuthenticatedUserId));
/*
* Make sure syscache entries are flushed for recent catalog changes.
* This allows us to find roles that were created on-the-fly during
* authentication.
*/
AcceptInvalidationMessages();
if (rolename != NULL)
{
roleTup = SearchSysCache1(AUTHNAME, PointerGetDatum(rolename));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment