mirror of
https://github.com/postgres/postgres.git
synced 2025-05-12 16:21:30 +03:00
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
This commit is contained in:
parent
387a5cfb94
commit
e8d9caa436
@ -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));
|
||||
|
Loading…
x
Reference in New Issue
Block a user