This is the mail archive of the
cygwin-patches
mailing list for the Cygwin project.
[PATCH] fstat() problem in libc/rexec.cc
- From: Earl Chew <earl_chew at agilent dot com>
- To: cygwin-patches at cygwin dot com
- Date: Mon, 06 Apr 2009 13:20:47 -0700
- Subject: [PATCH] fstat() problem in libc/rexec.cc
The current implementation of rexec() uses fstat() and it seems
to pick up the wrong values for st_mode. As a consequence
the code keeps complaining about the permissions for ~/.netrc
and won't complete successfully.
I don't know enough about the how the re-mapping of stat/stat64
works within cygwin1.dll itself, but changing to fstat64()
like libc/iruserok.c resolves the problem.
winsup/cygwin/Changlog
* libc/rexec.cc: Use fstat64() instead of fstat().
--- winsup/cygwin/libc/rexec.cc.orig 2009-04-06 12:11:02.046875000 -0700
+++ winsup/cygwin/libc/rexec.cc 2009-04-06 12:12:31.578125000 -0700
@@ -159,7 +159,7 @@
char myname[INTERNET_MAX_HOST_NAME_LENGTH + 1];
const char *mydomain;
int t, i, c, usedefault = 0;
- struct stat stb;
+ struct __stat64 stb;
hdir = getenv("HOME");
if (hdir == NULL)
@@ -218,7 +218,7 @@
break;
case PASSWD:
if ((*aname == 0 || strcmp(*aname, "anonymous")) &&
- fstat(fileno(cfile), &stb) >= 0 &&
+ fstat64(fileno(cfile), &stb) >= 0 &&
(stb.st_mode & 077) != 0) {
warnx("Error: .netrc file is readable by others.");
warnx("Remove password or make file unreadable by others.");
@@ -230,7 +230,7 @@
}
break;
case ACCOUNT:
- if (fstat(fileno(cfile), &stb) >= 0
+ if (fstat64(fileno(cfile), &stb) >= 0
&& (stb.st_mode & 077) != 0) {
warnx("Error: .netrc file is readable by others.");
warnx("Remove account or make file unreadable by others.");