Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2001-02-22 00:49:37 +0300
committerCorinna Vinschen <corinna@vinschen.de>2001-02-22 00:49:37 +0300
commit10b06c5ee0712991bc7cec3688f8059069f9fcd2 (patch)
tree52156053d0ae8881b6c7e52fe3a0bc568f0eccb8 /winsup/cygwin/security.cc
parent5b2ea3a43613c3d93ca9549880d3fd2dbb9ec0e1 (diff)
* Makefile.in: Add `-lshell32 -luuid' to link pass for new-cygwin1.dll.
* autoload.cc: Add LoadDLLinitfunc for ole32.dll. Add LoadDLLfuncEx statements for CoInitialize@4, CoUninitialize@0 and CoCreateInstance@20. * dir.cc (dir_suffixes): New datastructure. (readdir): Check for R/O *.lnk files to hide the suffix. (opendir): Use `dir_suffixes' in path conversion. (rmdir): Ditto. * fhandler.cc (fhandler_disk_file::fstat): Add S_IFLNK flag before calling `get_file_attribute'. Take FILE_ATTRIBUTE_READONLY into account only if the file is no symlink. * path.cc (inner_suffixes): New datastructure. (SYMLINKATTR): Eliminated. (path_conv::check): Use `inner_suffixes' on inner path components. (shortcut_header): New global static variable. (shortcut_initalized): Ditto. (create_shortcut_header): New function. (cmp_shortcut_header): Ditto. (symlink): Create symlinks by creating windows shortcuts. Preserve the old code. (symlink_info::check_shortcut): New method. (symlink_info::check_sysfile): Ditto. (symlink_info::check): Check for shortcuts. Move code reading old system attribute symlinks into symlink_info::check_sysfile(). (chdir): Use `dir_suffixes' in path conversion. * security.cc (get_file_attribute): Check for S_IFLNK flag. Force 0777 permissions then. * spawn.cc (std_suffixes): Add ".lnk" suffix. * syscalls.cc (_unlink): Use `inner_suffixes' in path conversion. Check for shortcut symlinks to eliminate R/O attribute before calling DeleteFile(). (stat_suffixes): Add ".lnk" suffix. (stat_worker): Force 0777 permissions if file is a symlink.
Diffstat (limited to 'winsup/cygwin/security.cc')
-rw-r--r--winsup/cygwin/security.cc12
1 files changed, 9 insertions, 3 deletions
diff --git a/winsup/cygwin/security.cc b/winsup/cygwin/security.cc
index 34ffc02fe..0f1a52dae 100644
--- a/winsup/cygwin/security.cc
+++ b/winsup/cygwin/security.cc
@@ -808,8 +808,15 @@ int
get_file_attribute (int use_ntsec, const char *file,
int *attribute, uid_t *uidret, gid_t *gidret)
{
+ int res;
+
if (use_ntsec && allow_ntsec)
- return get_nt_attribute (file, attribute, uidret, gidret);
+ {
+ res = get_nt_attribute (file, attribute, uidret, gidret);
+ if (attribute && (*attribute & S_IFLNK) == S_IFLNK)
+ *attribute |= S_IRWXU | S_IRWXG | S_IRWXO;
+ return res;
+ }
if (uidret)
*uidret = getuid ();
@@ -819,8 +826,7 @@ get_file_attribute (int use_ntsec, const char *file,
if (!attribute)
return 0;
- int res = NTReadEA (file, ".UNIXATTR",
- (char *) attribute, sizeof (*attribute));
+ res = NTReadEA (file, ".UNIXATTR", (char *) attribute, sizeof (*attribute));
/* symlinks are everything for everyone!*/
if ((*attribute & S_IFLNK) == S_IFLNK)