[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    kdelibs/kdecore [POSSIBLY UNSAFE]
From:       Oswald Buddenhagen <ossi () kde ! org>
Date:       2003-10-31 22:05:04
[Download RAW message or body]

CVS commit by ossi: 

don't use fixed fd for kgrantpty. should make FreeBSD users happy. :)


  M +8 -7      kgrantpty.c   1.10 [POSSIBLY UNSAFE: printf]
  M +2 -7      kpty.cpp   1.10


--- kdelibs/kdecore/kgrantpty.c  #1.9:1.10
@@ -41,5 +41,4 @@
 #endif
 
-#define PTY_FILENO 3    /* keep in sync with kpty */
 #define TTY_GROUP "tty"
 
@@ -53,9 +52,10 @@ int main (int argc, char *argv[])
   mode_t        mod;
   char*         tty;
+  int           fd;
 
   /* check preconditions **************************************************/
-  if (argc != 2 || (strcmp(argv[1],"--grant") && strcmp(argv[1],"--revoke")))
+  if (argc != 3 || (strcmp(argv[1],"--grant") && strcmp(argv[1],"--revoke")))
   {
-    printf("usage: %s (--grant|--revoke)\n"
+    printf("usage: %s (--grant|--revoke) <file descriptor>\n"
            "%s is a helper for the KDE core libraries.\n"
            "It is not intended to be called from the command line.\n"
@@ -86,4 +86,5 @@ int main (int argc, char *argv[])
   p = getgrnam(TTY_GROUP);            /* posix */
   gid = p ? p->gr_gid : getgid ();    /* posix */
+  fd = atoi(argv[2]);
 
   /* get slave pty name from master pty file handle in PTY_FILENO *********/
@@ -111,5 +112,5 @@ int main (int argc, char *argv[])
     struct stat dsb;
 
-    if (fstat(PTY_FILENO, &dsb) != -1) {
+    if (fstat(fd, &dsb) != -1) {
       if ((dp = opendir(_PATH_DEV)) != NULL) {
         while ((dirp = readdir(dp))) {
@@ -132,6 +133,6 @@ int main (int argc, char *argv[])
   }
 #else
-  /* Check that PTY_FILENO is a valid master pseudo terminal.  */
-  pty = ttyname(PTY_FILENO);          /* posix */
+  /* Check that fd is a valid master pseudo terminal.  */
+  pty = ttyname(fd);          /* posix */
 #endif
 
@@ -141,5 +142,5 @@ int main (int argc, char *argv[])
     return 1; /* FAIL */
   }
-  close(PTY_FILENO);
+  close(fd);
 
   /* matches /dev/pty?? */

--- kdelibs/kdecore/kpty.cpp  #1.9:1.10
@@ -157,5 +157,4 @@ public:
 };
 
-#define PTY_FILENO 3
 #define BASE_CHOWN "kgrantpty"
 
@@ -502,11 +501,7 @@ bool KPty::chownpty(bool grant)
   if (pid == 0)
   {
-    /* We pass the master pseudo terminal as file descriptor PTY_FILENO. */
-    if (d->masterFd != PTY_FILENO && 
-        dup2(d->masterFd , PTY_FILENO) < 0)
-      exit(1);
     QString path = locate("exe", BASE_CHOWN);
-    execle(path.ascii(), BASE_CHOWN, grant?"--grant":"--revoke", (void *)0, 
-        NULL);
+    execle(path.ascii(), BASE_CHOWN, grant?"--grant":"--revoke",
+           QString::number(d->masterFd).ascii(), (void *)0, (void *)0);
     exit(1); // should not be reached
   }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic