@@ -12,31 +12,35 @@ static ClientAuthentication_hook_type original_client_auth_hook = NULL;
12
12
13
13
static void ensure_role_and_database_exists (Port * port , int status ) {
14
14
char * cmd ;
15
+ char * postgres_user ;
15
16
char * role_attributes ;
16
17
17
18
if (original_client_auth_hook ) {
18
19
original_client_auth_hook (port , status );
19
20
}
20
21
21
- // don't infinitely recurse
22
- if (strcmp (port -> database_name , "postgres" ) == 0 && strcmp (port -> user_name , "postgres" ) == 0 ) {
22
+ postgres_user = getenv ("POSTGRES_USER" );
23
+
24
+ fprintf (stderr , "handling connection for username '%s' to database '%s'\n" , port -> user_name , port -> database_name );
25
+
26
+ // don't infinitely recurse when connecting as superuser
27
+ if (strcmp (port -> database_name , postgres_user ) == 0 && strcmp (port -> user_name , postgres_user ) == 0 ) {
23
28
return ;
24
29
}
25
30
26
31
role_attributes = getenv ("POSTGRES_ROLE_ATTRIBUTES" );
27
32
28
33
fprintf (stderr , "ensuring user_name '%s' exists with attributes '%s'\n" , port -> user_name , role_attributes );
29
34
asprintf (& cmd ,
30
- "echo \"SELECT 'CREATE ROLE %s WITH %s' WHERE NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '%s')\\gexec\" | psql" ,
31
- port -> user_name , role_attributes , port -> user_name );
35
+ "echo \"SELECT 'CREATE ROLE %s WITH %s' WHERE NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '%s')\\gexec\" | psql -U %s -d %s " ,
36
+ port -> user_name , role_attributes , port -> user_name , postgres_user , postgres_user );
32
37
system (cmd );
33
38
free (cmd );
34
39
35
40
fprintf (stderr , "ensuring database '%s' exists\n" , port -> database_name );
36
-
37
41
asprintf (& cmd ,
38
- "echo \"SELECT 'CREATE DATABASE %s WITH OWNER = %s' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '%s')\\gexec\" | psql" ,
39
- port -> database_name , port -> user_name , port -> database_name );
42
+ "echo \"SELECT 'CREATE DATABASE %s WITH OWNER = %s' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '%s')\\gexec\" | psql -U %s -d %s " ,
43
+ port -> database_name , port -> user_name , port -> database_name , postgres_user , postgres_user );
40
44
system (cmd );
41
45
free (cmd );
42
46
}
0 commit comments