This is the mail archive of the cygwin-developers@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: [mathew.boorman@au.cmg.com: /etc/profile /etc/passwd and HOME]


On Sun, Oct 28, 2001 at 11:42:54AM +0100, Corinna Vinschen wrote:
> On Fri, Oct 26, 2001 at 03:04:34PM -0400, Christopher Faylor wrote:
> > >Yes, perhaps Cygwin should do it in dll initialization.
> > 
> > Sure.  Why not?  We've got all of the info.  This shouldn't be too hard.
> > We already do this with HOMEDRIVE, etc.
> > 
> > I can't think of anything that it would hurt and it might help other
> > things.

I checked it in since I heard no objections.

Corinna

> Like that?
> 
> 	* uinfo.cc (internal_getlogin): Set environment variable
> 	$HOME from either /etc/passwd or $HOMEDRIVE/$HOMEPATH if
> 	necessary.
> 
> Index: uinfo.cc
> ===================================================================
> RCS file: /cvs/src/src/winsup/cygwin/uinfo.cc,v
> retrieving revision 1.56
> diff -u -p -r1.56 uinfo.cc
> --- uinfo.cc	2001/10/22 18:31:00	1.56
> +++ uinfo.cc	2001/10/28 10:42:08
> @@ -33,6 +33,7 @@ details. */
>  struct passwd *
>  internal_getlogin (cygheap_user &user)
>  {
> +  char buf[512];
>    char username[UNLEN + 1];
>    DWORD username_len = UNLEN + 1;
>    struct passwd *pw = NULL;
> @@ -47,7 +48,6 @@ internal_getlogin (cygheap_user &user)
>      {
>        LPWKSTA_USER_INFO_1 wui;
>        NET_API_STATUS ret;
> -      char buf[512];
>        char *env;
>  
>        user.set_logsrv (NULL);
> @@ -212,7 +212,28 @@ internal_getlogin (cygheap_user &user)
>  	}
>      }
>    debug_printf ("Cygwins Username: %s", user.name ());
> -  return pw ?: getpwnam(user.name ());
> +  if (!pw)
> +    pw = getpwnam(user.name ());
> +  if (!getenv ("HOME"))
> +    {
> +      const char *homedrive, *homepath;
> +      if (pw && pw->pw_dir && *pw->pw_dir)
> +        {
> +	  setenv ("HOME", pw->pw_dir, 1);
> +	  debug_printf ("Set HOME (from /etc/passwd) to %s", pw->pw_dir);
> +	}
> +      else if ((homedrive = getenv ("HOMEDRIVE"))
> +	       && (homepath = getenv ("HOMEPATH")))
> +	{
> +	  char home[MAX_PATH];
> +	  strcpy (buf, homedrive);
> +	  strcat (buf, homepath);
> +	  cygwin_conv_to_full_posix_path (buf, home);
> +	  setenv ("HOME", home, 1);
> +	  debug_printf ("Set HOME (from HOMEDRIVE/HOMEPATH) to %s", home);
> +	}
> +    }
> +  return pw;
>  }
>  
>  void
> 
> -- 
> Corinna Vinschen                  Please, send mails regarding Cygwin to
> Cygwin Developer                                mailto:cygwin@cygwin.com
> Red Hat, Inc.

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Developer                                mailto:cygwin@cygwin.com
Red Hat, Inc.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]