generate_old_dump(void)
{
int dbnum;
+ mode_t old_umask;
prep_status("Creating dump of global objects");
prep_status("Creating dump of database schemas\n");
+ /*
+ * Set umask for this function, all functions it calls, and all
+ * subprocesses/threads it creates. We can't use fopen_priv()
+ * as Windows uses threads and umask is process-global.
+ */
+ old_umask = umask(S_IRWXG | S_IRWXO);
+
/* create per-db dump files */
for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++)
{
while (reap_child(true) == true)
;
+ umask(old_umask);
+
end_progress_output();
check_ok();
}
#define MAXCMDLEN (2 * MAXPGPATH)
char cmd[MAXCMDLEN];
- mode_t old_umask = 0;
FILE *log;
va_list ap;
- old_umask = umask(S_IRWXG | S_IRWXO);
-
written = strlcpy(cmd, SYSTEMQUOTE, sizeof(cmd));
va_start(ap, fmt);
written += vsnprintf(cmd + written, MAXCMDLEN - written, fmt, ap);
if (written >= MAXCMDLEN)
pg_log(PG_FATAL, "command too long\n");
- log = fopen_priv(log_file, "a");
+ log = fopen(log_file, "a");
#ifdef WIN32
{
for (iter = 0; iter < 4 && log == NULL; iter++)
{
sleep(1);
- log = fopen_priv(log_file, "a");
+ log = fopen(log_file, "a");
}
}
#endif
result = system(cmd);
- umask(old_umask);
-
if (result != 0)
{
/* we might be in on a progress status line, so go to the next line */
* never reused while the server is running, so it works fine. We could
* log these commands to a third file, but that just adds complexity.
*/
- if ((log = fopen_priv(log_file, "a")) == NULL)
+ if ((log = fopen(log_file, "a")) == NULL)
pg_log(PG_FATAL, "cannot write to log file %s\n", log_file);
fprintf(log, "\n\n");
fclose(log);