Re: 8.0 Beta 1 // Environment Vars // .pgpass

Bruce Momjian <[email protected]>
Newsgroups gmane.comp.db.postgresql.devel.win32,gmane.comp.db.postgresql.devel.patches
Message-ID <[email protected]>
I have applied the attached patch which adds get_home_path() which uses
USERPROFILE on Win32 and HOME on Unix.

This should fix the reported problem.

---------------------------------------------------------------------------

Andrew Dunstan wrote:
> 
> 
> Joerg Hessdoerfer wrote:
> 
> >On Thursday 12 August 2004 06:25, Tom Lane wrote:
> >  
> >
> >>"efesar (the kay)" <[email protected]> writes:
> >>    
> >>
> >>>The 8.0 version does not acknowledge env vars like PGPASSWORD and seems
> >>>to ignore the contents of the .pgpass file.
> >>>      
> >>>
> >>Hmmm.   Those are probably the same problem, since finding .pgpass
> >>depends on expanding the $HOME env var.  But I have no idea why
> >>env vars aren't working for you ...
> >>    
> >>
> >Yep. AFAIK, $HOME doesn't always exist in WIN32, but $HOMEDRIVE and $HOMEPATH 
> >(or %HOMEPATH% and %HOMEDRIVE% ;-) do. Perhaps PG needs to do some munging to 
> >build the home path from those two?
> >
> >
> >  
> >
> 
> On my XP-Pro machine the appropriate setting appears to be %USERPROFILE% 
> - %HOMEPATH% is just "\"
> 
> See here for a complete list of available environment vars:
> 
> http://www.winnetmag.com/Article/ArticleID/23873/23873.html
> 
> cheers
> 
> andrew
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to [email protected])
> 

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  [email protected]               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073


---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

               http://archives.postgresql.org
/bjm/diff (text/plain, 6.8 KB)
Index: src/bin/psql/common.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/psql/common.c,v
retrieving revision 1.87
diff -c -c -r1.87 common.c
*** src/bin/psql/common.c	23 May 2004 22:20:10 -0000	1.87
--- src/bin/psql/common.c	18 Aug 2004 02:48:08 -0000
***************
*** 1078,1090 ****
  	if (**filename == '~')
  	{
  		char	   *fn;
- 		char	   *home;
  		char		oldp,
  				   *p;
  		struct passwd *pw;
  
  		fn = *filename;
! 		home = NULL;
  
  		p = fn + 1;
  		while (*p != '/' && *p != '\0')
--- 1078,1090 ----
  	if (**filename == '~')
  	{
  		char	   *fn;
  		char		oldp,
  				   *p;
  		struct passwd *pw;
+ 		char		home[MAXPGPATH];
  
  		fn = *filename;
! 		*home = '\0';
  
  		p = fn + 1;
  		while (*p != '/' && *p != '\0')
***************
*** 1094,1105 ****
  		*p = '\0';
  
  		if (*(fn + 1) == '\0')
! 			home = getenv("HOME");
  		else if ((pw = getpwnam(fn + 1)) != NULL)
! 			home = pw->pw_dir;
  
  		*p = oldp;
! 		if (home)
  		{
  			char	   *newfn;
  
--- 1094,1105 ----
  		*p = '\0';
  
  		if (*(fn + 1) == '\0')
! 			get_home_path(home);
  		else if ((pw = getpwnam(fn + 1)) != NULL)
! 			StrNCpy(home, pw->pw_dir, MAXPGPATH);
  
  		*p = oldp;
! 		if (strlen(home) != 0)
  		{
  			char	   *newfn;
  
Index: src/bin/psql/input.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/psql/input.c,v
retrieving revision 1.34
diff -c -c -r1.34 input.c
*** src/bin/psql/input.c	25 Jan 2004 03:07:22 -0000	1.34
--- src/bin/psql/input.c	18 Aug 2004 02:48:08 -0000
***************
*** 171,177 ****
  #ifdef USE_READLINE
  	if (flags & 1)
  	{
! 		const char *home;
  
  		useReadline = true;
  		initialize_readline();
--- 171,177 ----
  #ifdef USE_READLINE
  	if (flags & 1)
  	{
! 		char home[MAXPGPATH];
  
  		useReadline = true;
  		initialize_readline();
***************
*** 180,187 ****
  		if (GetVariable(pset.vars, "HISTSIZE") == NULL)
  			SetVariable(pset.vars, "HISTSIZE", "500");
  		using_history();
! 		home = getenv("HOME");
! 		if (home)
  		{
  			char *psql_history;
  
--- 180,186 ----
  		if (GetVariable(pset.vars, "HISTSIZE") == NULL)
  			SetVariable(pset.vars, "HISTSIZE", "500");
  		using_history();
! 		if (get_home_path(home))
  		{
  			char *psql_history;
  
***************
*** 231,240 ****
  #ifdef USE_READLINE
  	if (useHistory)
  	{
! 		char	   *home;
  
! 		home = getenv("HOME");
! 		if (home)
  		{
  			char	*psql_history;
  			int		 hist_size;
--- 230,238 ----
  #ifdef USE_READLINE
  	if (useHistory)
  	{
! 		char	   home[MAXPGPATH];
  
! 		if (get_home_path(home))
  		{
  			char	*psql_history;
  			int		 hist_size;
Index: src/bin/psql/startup.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/bin/psql/startup.c,v
retrieving revision 1.95
diff -c -c -r1.95 startup.c
*** src/bin/psql/startup.c	3 Jun 2004 00:07:37 -0000	1.95
--- src/bin/psql/startup.c	18 Aug 2004 02:48:09 -0000
***************
*** 570,577 ****
  static void
  process_psqlrc(char *argv0)
  {
- 	char	   *home;
  	char	   *psqlrc;
  	char	   global_file[MAXPGPATH];
  	char	   my_exec_path[MAXPGPATH];
  	char	   etc_path[MAXPGPATH];
--- 570,577 ----
  static void
  process_psqlrc(char *argv0)
  {
  	char	   *psqlrc;
+ 	char	   home[MAXPGPATH];
  	char	   global_file[MAXPGPATH];
  	char	   my_exec_path[MAXPGPATH];
  	char	   etc_path[MAXPGPATH];
***************
*** 582,588 ****
  	snprintf(global_file, MAXPGPATH, "%s/%s", etc_path, SYSPSQLRC);
  	process_psqlrc_file(global_file);
  
! 	if ((home = getenv("HOME")) != NULL)
  	{
  		psqlrc = pg_malloc(strlen(home) + 1 + strlen(PSQLRC) + 1);
  		sprintf(psqlrc, "%s/%s", home, PSQLRC);
--- 582,588 ----
  	snprintf(global_file, MAXPGPATH, "%s/%s", etc_path, SYSPSQLRC);
  	process_psqlrc_file(global_file);
  
! 	if (get_home_path(home))
  	{
  		psqlrc = pg_malloc(strlen(home) + 1 + strlen(PSQLRC) + 1);
  		sprintf(psqlrc, "%s/%s", home, PSQLRC);
Index: src/include/port.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/port.h,v
retrieving revision 1.53
diff -c -c -r1.53 port.h
*** src/include/port.h	17 Aug 2004 14:38:38 -0000	1.53
--- src/include/port.h	18 Aug 2004 02:48:10 -0000
***************
*** 50,55 ****
--- 50,56 ----
  extern void get_pkglib_path(const char *my_exec_path, char *ret_path);
  extern void get_locale_path(const char *my_exec_path, char *ret_path);
  extern void set_pglocale_pgservice(const char *argv0, const char *app);
+ extern bool get_home_path(char *ret_path);
  
  /*
   *	is_absolute_path
***************
*** 74,82 ****
  #endif
  
  
- 
- 
- 
  /* Portable way to find binaries */
  extern int find_my_exec(const char *argv0, char *retpath);
  extern int find_other_exec(const char *argv0, const char *target,
--- 75,80 ----
***************
*** 104,109 ****
--- 102,113 ----
  #define SYSTEMQUOTE ""
  #endif
  
+ #ifdef WIN32
+ #define HOMEDIR	"USERPROFILE"
+ #else
+ #define HOMEDIR	"HOME"
+ #endif
+ 
  /* Portable delay handling */
  extern void pg_usleep(long microsec);
  
Index: src/interfaces/libpq/fe-connect.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/interfaces/libpq/fe-connect.c,v
retrieving revision 1.280
diff -c -c -r1.280 fe-connect.c
*** src/interfaces/libpq/fe-connect.c	17 Aug 2004 04:24:23 -0000	1.280
--- src/interfaces/libpq/fe-connect.c	18 Aug 2004 02:48:16 -0000
***************
*** 3093,3099 ****
  {
  	FILE	   *fp;
  	char	   *pgpassfile;
! 	char	   *home;
  	struct stat stat_buf;
  
  #define LINELEN NAMEDATALEN*5
--- 3093,3099 ----
  {
  	FILE	   *fp;
  	char	   *pgpassfile;
! 	char	   home[MAXPGPATH];
  	struct stat stat_buf;
  
  #define LINELEN NAMEDATALEN*5
***************
*** 3112,3119 ****
  		port = DEF_PGPORT_STR;
  
  	/* Look for it in the home dir */
! 	home = getenv("HOME");
! 	if (!home)
  		return NULL;
  
  	pgpassfile = malloc(strlen(home) + 1 + strlen(PGPASSFILE) + 1);
--- 3112,3118 ----
  		port = DEF_PGPORT_STR;
  
  	/* Look for it in the home dir */
! 	if (!get_home_path(home))
  		return NULL;
  
  	pgpassfile = malloc(strlen(home) + 1 + strlen(PGPASSFILE) + 1);
Index: src/port/path.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/port/path.c,v
retrieving revision 1.30
diff -c -c -r1.30 path.c
*** src/port/path.c	13 Aug 2004 14:47:23 -0000	1.30
--- src/port/path.c	18 Aug 2004 02:48:20 -0000
***************
*** 371,376 ****
--- 371,397 ----
  
  
  /*
+  *	get_include_path
+  */
+ bool
+ get_home_path(char *ret_path)
+ {
+ 	if (getenv(HOMEDIR) == NULL)
+ 	{
+ 		*ret_path = '\0';
+ 		return false;
+ 	}
+ 	else
+ 	{
+ 		StrNCpy(ret_path, getenv(HOMEDIR), MAXPGPATH);
+ 		canonicalize_path(ret_path);
+ 		return true;
+ 	}
+ }
+ 
+ 
+ 
+ /*
   *	make_relative - adjust path to be relative to bin/
   */
  static void
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.