- (dtucker) [session.c openbsd-compat/bsd-cygwin_util.{c,h}] Bug #915: only

copy required environment variables on Cygwin.  Patch from vinschen at
   redhat.com, ok djm@
This commit is contained in:
Darren Tucker 2004-08-30 20:42:08 +10:00
parent 5a88d00349
commit 14c372d49d
4 changed files with 68 additions and 5 deletions

View File

@ -1,3 +1,8 @@
20040830
- (dtucker) [session.c openbsd-compat/bsd-cygwin_util.{c,h}] Bug #915: only
copy required environment variables on Cygwin. Patch from vinschen at
redhat.com, ok djm@
20040829 20040829
- (dtucker) [openbsd-compat/getrrsetbyname.c] Prevent getrrsetbyname from - (dtucker) [openbsd-compat/getrrsetbyname.c] Prevent getrrsetbyname from
failing with NOMEMORY if no sigs are returned and malloc(0) returns NULL. failing with NOMEMORY if no sigs are returned and malloc(0) returns NULL.
@ -1707,4 +1712,4 @@
- (djm) Trim deprecated options from INSTALL. Mention UsePAM - (djm) Trim deprecated options from INSTALL. Mention UsePAM
- (djm) Fix quote handling in sftp; Patch from admorten AT umich.edu - (djm) Fix quote handling in sftp; Patch from admorten AT umich.edu
$Id: ChangeLog,v 1.3536 2004/08/29 11:43:33 dtucker Exp $ $Id: ChangeLog,v 1.3537 2004/08/30 10:42:08 dtucker Exp $

View File

@ -29,7 +29,7 @@
#include "includes.h" #include "includes.h"
RCSID("$Id: bsd-cygwin_util.c,v 1.12 2004/04/18 11:15:45 djm Exp $"); RCSID("$Id: bsd-cygwin_util.c,v 1.13 2004/08/30 10:42:08 dtucker Exp $");
#ifdef HAVE_CYGWIN #ifdef HAVE_CYGWIN
@ -38,6 +38,7 @@ RCSID("$Id: bsd-cygwin_util.c,v 1.12 2004/04/18 11:15:45 djm Exp $");
#include <sys/utsname.h> #include <sys/utsname.h>
#include <sys/vfs.h> #include <sys/vfs.h>
#include <windows.h> #include <windows.h>
#include "xmalloc.h"
#define is_winnt (GetVersion() < 0x80000000) #define is_winnt (GetVersion() < 0x80000000)
#define ntsec_on(c) ((c) && strstr((c),"ntsec") && !strstr((c),"nontsec")) #define ntsec_on(c) ((c) && strstr((c),"ntsec") && !strstr((c),"nontsec"))
@ -96,7 +97,6 @@ has_capability(int what)
*/ */
if (!inited) { if (!inited) {
struct utsname uts; struct utsname uts;
char *c;
if (!uname(&uts)) { if (!uname(&uts)) {
int major_high = 0, major_low = 0, minor = 0; int major_high = 0, major_low = 0, minor = 0;
@ -236,4 +236,54 @@ register_9x_service(void)
RegisterServiceProcess(0, 1); RegisterServiceProcess(0, 1);
} }
#define NL(x) x, (sizeof (x) - 1)
#define WENV_SIZ (sizeof (wenv_arr) / sizeof (wenv_arr[0]))
static struct wenv {
const char *name;
size_t namelen;
} wenv_arr[] = {
{ NL("ALLUSERSPROFILE=") },
{ NL("COMMONPROGRAMFILES=") },
{ NL("COMPUTERNAME=") },
{ NL("COMSPEC=") },
{ NL("NUMBER_OF_PROCESSORS=") },
{ NL("OS=") },
{ NL("PATH=") },
{ NL("PATHEXT=") },
{ NL("PROCESSOR_ARCHITECTURE=") },
{ NL("PROCESSOR_IDENTIFIER=") },
{ NL("PROCESSOR_LEVEL=") },
{ NL("PROCESSOR_REVISION=") },
{ NL("PROGRAMFILES=") },
{ NL("SYSTEMDRIVE=") },
{ NL("SYSTEMROOT=") },
{ NL("TMP=") },
{ NL("TEMP=") },
{ NL("WINDIR=") },
};
char **
fetch_windows_environment(void)
{
char **e, **p;
int i, idx = 0;
p = xmalloc(WENV_SIZ * sizeof(char *));
for (e = environ; *e != NULL; ++e) {
for (i = 0; i < WENV_SIZ; ++i) {
if (!strncmp(*e, wenv_arr[i].name, wenv_arr[i].namelen))
p[idx++] = *e;
}
}
p[idx] = NULL;
return p;
}
void
free_windows_environment(char **p)
{
xfree(p);
}
#endif /* HAVE_CYGWIN */ #endif /* HAVE_CYGWIN */

View File

@ -1,4 +1,4 @@
/* $Id: bsd-cygwin_util.h,v 1.10 2003/08/07 06:28:16 dtucker Exp $ */ /* $Id: bsd-cygwin_util.h,v 1.11 2004/08/30 10:42:08 dtucker Exp $ */
/* /*
* Copyright (c) 2000, 2001, Corinna Vinschen <vinschen@cygnus.com> * Copyright (c) 2000, 2001, Corinna Vinschen <vinschen@cygnus.com>
@ -46,6 +46,8 @@ int binary_pipe(int fd[2]);
int check_nt_auth(int, struct passwd *); int check_nt_auth(int, struct passwd *);
int check_ntsec(const char *); int check_ntsec(const char *);
void register_9x_service(void); void register_9x_service(void);
char **fetch_windows_environment(void);
void free_windows_environment(char **);
#define open binary_open #define open binary_open
#define pipe binary_pipe #define pipe binary_pipe

View File

@ -979,7 +979,13 @@ do_setup_env(Session *s, const char *shell)
* The Windows environment contains some setting which are * The Windows environment contains some setting which are
* important for a running system. They must not be dropped. * important for a running system. They must not be dropped.
*/ */
copy_environment(environ, &env, &envsize); {
char **p;
p = fetch_windows_environment();
copy_environment(p, &env, &envsize);
free_windows_environment(p);
}
#endif #endif
#ifdef GSSAPI #ifdef GSSAPI