Create temporary pg.auto.conf file with the same permissions as the original

Commit 0574279 set the file permissions to 0600 rather than the user's
umask, but if initdb was executed with -g/--allow-group-access, the
file is maintained with 0640, so we'll just maintain the existing
permssions.
This commit is contained in:
Ian Barwick
2020-04-07 13:29:59 +09:00
parent cd80f265ac
commit 599bab590a
4 changed files with 15 additions and 4 deletions

View File

@@ -1821,6 +1821,7 @@ modify_auto_conf(const char *data_dir, KeyValueList *items)
FILE *fp; FILE *fp;
mode_t um; mode_t um;
struct stat auto_conf_st;
KeyValueList config = {NULL, NULL}; KeyValueList config = {NULL, NULL};
KeyValueListCell *cell = NULL; KeyValueListCell *cell = NULL;
@@ -1877,8 +1878,13 @@ modify_auto_conf(const char *data_dir, KeyValueList *items)
cell->key, cell->value); cell->key, cell->value);
} }
/* Set umask to 0600 */ stat(auto_conf.data, &auto_conf_st);
um = umask((~(S_IRUSR | S_IWUSR)) & (S_IRWXG | S_IRWXO));
/*
* Set umask so the temporary file is created in the same mode as the original
* postgresql.auto.conf file.
*/
um = umask(~(auto_conf_st.st_mode));
fp = fopen(auto_conf_tmp.data, "w"); fp = fopen(auto_conf_tmp.data, "w");
umask(um); umask(um);

View File

@@ -1165,7 +1165,6 @@ _get_pg_setting(PGconn *conn, const char *setting, char *str_output, bool *bool_
/* /*
* Note we assume the caller is sure this is a boolean parameter * Note we assume the caller is sure this is a boolean parameter
*/ */
printf("YYY %s\n", PQgetvalue(res, i, 1));
if (strncmp(PQgetvalue(res, i, 1), "on", MAXLEN) == 0) if (strncmp(PQgetvalue(res, i, 1), "on", MAXLEN) == 0)
*bool_output = true; *bool_output = true;
else else

View File

@@ -136,6 +136,13 @@
</para> </para>
</listitem> </listitem>
<listitem>
<para>
Ensure <filename>postgresql.auto.conf</filename> is created with
correct permissions (PostgreSQL 12 and later).
</para>
</listitem>
</itemizedlist> </itemizedlist>
</para> </para>
</sect2> </sect2>

View File

@@ -6221,7 +6221,6 @@ check_upstream_config(PGconn *conn, int server_version_num, t_node_info *upstrea
} }
} }
printf("XXX %i\n", PQserverVersion(conn));
if (data_checksums == false && wal_log_hints == false) if (data_checksums == false && wal_log_hints == false)
{ {
/* /*