* path.cc (path_conv::check): Don't follow reparse point symlinks if
PC_SYM_NOFOLLOW_REP flag is set. (cygwin_conv_path): Set PC_SYM_NOFOLLOW_REP flag when converting from POSIX to Win32. * path.h (enum pathconv_arg): Define PC_SYM_NOFOLLOW_REP flag.
This commit is contained in:
		@@ -1,3 +1,11 @@
 | 
			
		||||
2011-01-17  Corinna Vinschen  <corinna@vinschen.de>
 | 
			
		||||
 | 
			
		||||
	* path.cc (path_conv::check): Don't follow reparse point symlinks if
 | 
			
		||||
	PC_SYM_NOFOLLOW_REP flag is set.
 | 
			
		||||
	(cygwin_conv_path): Set PC_SYM_NOFOLLOW_REP flag when converting from
 | 
			
		||||
	POSIX to Win32.
 | 
			
		||||
	* path.h (enum pathconv_arg): Define PC_SYM_NOFOLLOW_REP flag.
 | 
			
		||||
 | 
			
		||||
2011-01-17  Corinna Vinschen  <corinna@vinschen.de>
 | 
			
		||||
 | 
			
		||||
	* fhandler_proc.cc (proc_tab_cmp): Fix typo in comment.
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/* path.cc: path support.
 | 
			
		||||
 | 
			
		||||
     Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
 | 
			
		||||
     2006, 2007, 2008, 2009, 2010 Red Hat, Inc.
 | 
			
		||||
     2006, 2007, 2008, 2009, 2010, 2011 Red Hat, Inc.
 | 
			
		||||
 | 
			
		||||
  This file is part of Cygwin.
 | 
			
		||||
 | 
			
		||||
@@ -920,7 +920,9 @@ is_virtual_symlink:
 | 
			
		||||
	  else if (symlen > 0)
 | 
			
		||||
	    {
 | 
			
		||||
	      saw_symlinks = 1;
 | 
			
		||||
	      if (component == 0 && !need_directory && !(opt & PC_SYM_FOLLOW))
 | 
			
		||||
	      if (component == 0 && !need_directory
 | 
			
		||||
		  && (!(opt & PC_SYM_FOLLOW)
 | 
			
		||||
		      || (is_rep_symlink () && (opt & PC_SYM_NOFOLLOW_REP))))
 | 
			
		||||
		{
 | 
			
		||||
		  set_symlink (symlen); // last component of path is a symlink.
 | 
			
		||||
		  if (opt & PC_SYM_CONTENTS)
 | 
			
		||||
@@ -2917,8 +2919,8 @@ cygwin_conv_path (cygwin_conv_path_t what, const void *from, void *to,
 | 
			
		||||
    case CCP_POSIX_TO_WIN_A:
 | 
			
		||||
      {
 | 
			
		||||
	p.check ((const char *) from,
 | 
			
		||||
		 PC_POSIX | PC_SYM_FOLLOW | PC_NO_ACCESS_CHECK | PC_NOWARN
 | 
			
		||||
		 | (relative ? PC_NOFULL : 0));
 | 
			
		||||
		 PC_POSIX | PC_SYM_FOLLOW | PC_SYM_NOFOLLOW_REP
 | 
			
		||||
		 | PC_NO_ACCESS_CHECK | PC_NOWARN | (relative ? PC_NOFULL : 0));
 | 
			
		||||
	if (p.error)
 | 
			
		||||
	  return_with_errno (p.error);
 | 
			
		||||
	PUNICODE_STRING up = p.get_nt_native_path ();
 | 
			
		||||
@@ -2953,9 +2955,9 @@ cygwin_conv_path (cygwin_conv_path_t what, const void *from, void *to,
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    case CCP_POSIX_TO_WIN_W:
 | 
			
		||||
      p.check ((const char *) from, PC_POSIX | PC_SYM_FOLLOW
 | 
			
		||||
				    | PC_NO_ACCESS_CHECK | PC_NOWARN
 | 
			
		||||
				    | (relative ? PC_NOFULL : 0));
 | 
			
		||||
      p.check ((const char *) from,
 | 
			
		||||
	       PC_POSIX | PC_SYM_FOLLOW | PC_SYM_NOFOLLOW_REP
 | 
			
		||||
	       | PC_NO_ACCESS_CHECK | PC_NOWARN | (relative ? PC_NOFULL : 0));
 | 
			
		||||
      if (p.error)
 | 
			
		||||
	return_with_errno (p.error);
 | 
			
		||||
      /* Relative Windows paths are always restricted to MAX_PATH chars. */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/* path.h: path data structures
 | 
			
		||||
 | 
			
		||||
   Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005,
 | 
			
		||||
   2006, 2007, 2008, 2009, 2010 Red Hat, Inc.
 | 
			
		||||
   2006, 2007, 2008, 2009, 2010, 2011 Red Hat, Inc.
 | 
			
		||||
 | 
			
		||||
This file is part of Cygwin.
 | 
			
		||||
 | 
			
		||||
@@ -54,6 +54,7 @@ enum pathconv_arg
 | 
			
		||||
{
 | 
			
		||||
  PC_SYM_FOLLOW		= 0x0001,
 | 
			
		||||
  PC_SYM_NOFOLLOW	= 0x0002,
 | 
			
		||||
  PC_SYM_NOFOLLOW_REP	= 0x0004,
 | 
			
		||||
  PC_SYM_CONTENTS	= 0x0008,
 | 
			
		||||
  PC_NOFULL		= 0x0010,
 | 
			
		||||
  PC_NULLEMPTY		= 0x0020,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user