Paskevich).
- rip out support for obsolete sgtty.h interface.
- rip out support for non-POSIX termios variants.
+ - update libptytty.
+ - update iom.C, make it call ptytty::sanitise_stdfd on init.
8.1 Thu Dec 7 22:27:25 CET 2006
- ケリスマスプレゼント - zomg!!1, it's too early!!!
static struct init {
init ()
{
+#ifdef IOM_PREINIT
+ { IOM_PREINIT }
+#endif
iom_valid = true;
#if IOM_SIG
tw0.start (TSTAMP_MAX);
#endif
+
+#ifdef IOM_POSTINIT
+ { IOM_POSTINIT }
+#endif
}
~init ()
#ifndef RXVT_IOM_CONF_H__
#define RXVT_IOM_CONF_H__
-#include <rxvtutil.h>
+#include "rxvtutil.h"
#define IOM_IO 1
#define IOM_TIME 1
#define IOM_IDLE 1
#define IOM_CHILD 1
+#include "libptytty.h"
+#define IOM_PREINIT ptytty::sanitise_stdfd ();
+
#endif
bool make_controlling_tty ();
void set_utf8_mode (bool on);
+ static void sanitise_stdfd ();
static void init ();
static ptytty *create (); // create a new pty object
int ptytty_make_controlling_tty (PTYTTY ptytty);
void ptytty_set_utf8_mode (PTYTTY ptytty, int on);
+void ptytty_sanitise_stdfd ();
void ptytty_init ();
PTYTTY ptytty_create ();
#include <sys/socket.h>
#include <unistd.h>
#include <fcntl.h>
+#include <errno.h>
// helper/proxy support
}
void
+ptytty::sanitise_stdfd ()
+{
+ // sanitise stdin/stdout/stderr to point to *something*.
+ for (int fd = 0; fd <= 2; ++fd)
+ if (fcntl (fd, F_GETFL) < 0 && errno == EBADF)
+ {
+ int fd2 = open ("/dev/tty", fd ? O_WRONLY : O_RDONLY);
+
+ if (fd2 < 0)
+ fd2 = open ("/dev/null", fd ? O_WRONLY : O_RDONLY);
+
+ if (fd2 != fd)
+ abort ();
+ }
+}
+
+void
ptytty::init ()
{
+ sanitise_stdfd ();
+
uid_t uid = getuid ();
gid_t gid = getgid ();