summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Jon McCann <mccann@jhu.edu>2007-05-15 11:15:12 -0400
committerWilliam Jon McCann <mccann@jhu.edu>2007-05-15 11:15:12 -0400
commit17ff9ceb88e0b7f6dc5a7e6eac5ff98cb4a5cabe (patch)
treeff7f3670dad92b8293fab16176a68cb11549be95
parentfe29cc406719428bcc73d980299e4639a9bb37f1 (diff)
a few fixes for getfd suggested by Lennart
I am currently investigating how to best integrate PulseAudio with ConsoleKit/PolicyKit. While doing that I had a look on your code, and found a few issues in getfd.c I'd like to report, before I forget them. I couldn't find any bugzilla with at consolekit project (neither fedora, nor fdo, nor gnome?) hence I am mailing you in person. In getfd.c in open_a_console() a close() is missing if is_a_console is missing. The open() in open_a_console() should probably use O_NOCTTY. Otherwise C-c on the console might end up in a SIGINT to your daemon process! Also I'd add an isatty() check to is_a_console(), to makes sure that you're actually talking to a TTY before you issue KDGKBTYPE on it. ioctl()s are unfortunately not unique, hence i'd recommend that check. That's it, Lennart
-rw-r--r--src/getfd.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/getfd.c b/src/getfd.c
index 69c37a3..56c7dd7 100644
--- a/src/getfd.c
+++ b/src/getfd.c
@@ -30,7 +30,8 @@ is_a_console (int fd)
char arg;
arg = 0;
- return (ioctl (fd, KDGKBTYPE, &arg) == 0
+ return (isatty (fd)
+ && ioctl (fd, KDGKBTYPE, &arg) == 0
&& ((arg == KB_101) || (arg == KB_84)));
}
@@ -39,11 +40,18 @@ open_a_console (char *fnam)
{
int fd;
- fd = open (fnam, O_RDONLY);
+ fd = open (fnam, O_RDONLY | O_NOCTTY);
if (fd < 0 && errno == EACCES)
- fd = open(fnam, O_WRONLY);
- if (fd < 0 || ! is_a_console (fd))
+ fd = open (fnam, O_WRONLY | O_NOCTTY);
+
+ if (fd < 0)
return -1;
+
+ if (! is_a_console (fd)) {
+ close (fd);
+ fd = -1;
+ }
+
return fd;
}