[PATCH] fstat() problem in libc/rexec.cc

Earl Chew earl_chew@agilent.com
Mon Apr 6 20:19:00 GMT 2009


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.");






More information about the Cygwin-patches mailing list