>> I note that "postgres -C data_directory" will refuse to run on the >> command line because I've got admin privileges in Windows, and that >> pg_ctl normally starts postgres.exe using CreateRestrictedProcess. >> But it does not do so for the popen call in adjust_data_dir.
> if that actually is a third bug, as seems likely, somebody with access > to a windows environment will need to deal with it. I am able to reproduce this problem, "that pg_ctl throws error for administrative user in the mentioned code path". One solution to this problem is that pg_ctl invoke itself in a restricted mode, similar to initdb. This will allow popen call to be successful in pg_ctl code path. Please let me know if this solution is okay, I can create the patch for it. For Referrence initdb code is as below, we can have similar code for pg_ctl: #ifdef WIN32 /* * Before we execute another program, make sure that we are running with a * restricted token. If not, re-execute ourselves with one. */ if ((restrict_env = getenv("PG_RESTRICT_EXEC")) == NULL || strcmp(restrict_env, "1") != 0) { PROCESS_INFORMATION pi; char *cmdline; ZeroMemory(&pi, sizeof(pi)); cmdline = xstrdup(GetCommandLine()); putenv("PG_RESTRICT_EXEC=1"); if (!CreateRestrictedProcess(cmdline, &pi)) { fprintf(stderr, "Failed to re-exec with restricted token: %lu.\n", GetLastError()); } else { /* * Successfully re-execed. Now wait for child process to capture * exitcode. */ DWORD x; CloseHandle(pi.hThread); WaitForSingleObject(pi.hProcess, INFINITE); if (!GetExitCodeProcess(pi.hProcess, &x)) { fprintf(stderr, "Failed to get exit code from subprocess: %lu\n", GetLastError()); exit(1); } exit(x); } } #endif -----Original Message----- From: pgsql-bugs-ow...@postgresql.org [mailto:pgsql-bugs-ow...@postgresql.org] On Behalf Of Tom Lane Sent: Tuesday, June 12, 2012 7:53 AM To: Edmund Horner Cc: pgsql-bugs@postgresql.org; Bruce Momjian Subject: Re: [BUGS] 9.2 beta2 - pg_ctl crashes on Win32 when neither PGDATA nor -D specified Edmund Horner <ejr...@gmail.com> writes: > In 9.1, if I run "pg_ctl start" without providing way for it to find > the datadir, it prints the error: > C:\ehorner\pgsql-old\bin>pg_ctl start > pg_ctl: no database directory specified and environment variable > PGDATA unset > Try "pg_ctl --help" for more information. > In 9.2 (beta1 and beta2), it runs for a couple of seconds and then > Windows pops up an error box saying it has "encountered a problem". I > ... > I think it could be something in > http://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=aaa6e1def2 92cdacb6b27088898793b1b879fedf#patch5 Hm, that patch seems to be several bricks shy of a load. I will fix two obvious bugs in it: (1) not dump core on boxes where printf("%s", NULL) dumps core; (2) not try to call adjust_data_dir before complaining for lack of a -D switch; since adjust_data_dir does not do anything to the value of pg_config, it's just silly to do things in that order. However, > I note that "postgres -C data_directory" will refuse to run on the > command line because I've got admin privileges in Windows, and that > pg_ctl normally starts postgres.exe using CreateRestrictedProcess. > But it does not do so for the popen call in adjust_data_dir. if that actually is a third bug, as seems likely, somebody with access to a windows environment will need to deal with it. regards, tom lane -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs