aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile15
-rw-r--r--src/console_check.c207
-rw-r--r--src/console_init.c168
-rw-r--r--src/securetty.815
-rw-r--r--src/securetty.c127
5 files changed, 1 insertions, 531 deletions
diff --git a/src/Makefile b/src/Makefile
index b478cb9f..68833182 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,8 +1,7 @@
CFLAGS+=$(RPM_OPT_FLAGS) -Wall -D_GNU_SOURCE
PROGS=usernetctl netreport testd usleep ipcalc \
- fstab-decode getkey ppp-watch consoletype genhostid rename_device \
- console_init console_check securetty
+ fstab-decode getkey ppp-watch consoletype genhostid rename_device
PPPWATCH_OBJS=ppp-watch.o shvar.o
CONSOLE_INIT_OBJS=console_init.o shvar.o
USLEEP_OBJS=usleep.o
@@ -28,11 +27,8 @@ install:
install -m 755 getkey $(ROOT)/sbin/getkey
install -m 755 ppp-watch $(ROOT)/sbin/ppp-watch
install -m 755 consoletype $(ROOT)/sbin/consoletype
- install -m 755 securetty $(ROOT)/sbin/securetty
install -m 755 sushell $(ROOT)/sbin/sushell
install -m 755 rename_device $(ROOT)/lib/udev/rename_device
- install -m 755 console_init $(ROOT)/lib/udev/console_init
- install -m 755 console_check $(ROOT)/lib/udev/console_check
install -m 644 genhostid.1 $(ROOT)$(mandir)/man1
install -m 644 getkey.1 $(ROOT)$(mandir)/man1
install -m 644 netreport.1 $(ROOT)$(mandir)/man1
@@ -44,7 +40,6 @@ install:
install -m 644 consoletype.1 $(ROOT)$(mandir)/man1
install -m 644 ifup.8 $(ROOT)$(mandir)/man8
install -m 644 setsysfont.8 $(ROOT)$(mandir)/man8
- install -m 644 securetty.8 $(ROOT)$(mandir)/man8
install -m 644 sushell.8 $(ROOT)$(mandir)/man8
ln -s ifup.8 $(ROOT)$(mandir)/man8/ifdown.8
@@ -72,9 +67,6 @@ usernetctl.o: usernetctl.c
usernetctl: usernetctl.c usernetctl.o
$(CC) $(LDFLAGS) -pie -o $@ $@.o
-securetty: securetty.o
- $(CC) $(LDFLAGS) -o $@ $<
-
shvar.o: shvar.c
$(CC) $(CFLAGS) `pkg-config glib-2.0 --cflags` -c shvar.c -o shvar.o
@@ -84,8 +76,3 @@ ppp-watch.o: ppp-watch.c
rename_device: rename_device.c
$(CC) $(CFLAGS) `pkg-config glib-2.0 --cflags` -o $@ $< `pkg-config glib-2.0 --libs`
-console_init.o: console_init.c
- $(CC) $(CFLAGS) `pkg-config glib-2.0 --cflags` -c console_init.c -o console_init.o
-
-console_init: $(CONSOLE_INIT_OBJS)
- $(CC) $(LDFLAGS) -o $@ $(CONSOLE_INIT_OBJS) `pkg-config glib-2.0 --libs`
diff --git a/src/console_check.c b/src/console_check.c
deleted file mode 100644
index 8d01d829..00000000
--- a/src/console_check.c
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright (c) 2008-2009 Red Hat, Inc. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License, version 2,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- */
-
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <termios.h>
-#include <unistd.h>
-
-#include <sys/ioctl.h>
-
-#include <linux/serial.h>
-#include <linux/serial_core.h>
-
-#ifndef PORT_OMAP
-/* from linux-2.6/include/linux/serial_core.h commit b612633b */
-#define PORT_OMAP 96
-#endif
-
-struct speeds
-{
- speed_t speed;
- unsigned long value;
-};
-
-struct speeds speed_map[] =
-{
- {B50, 50},
- {B75, 75},
- {B110, 110},
- {B134, 134},
- {B150, 150},
- {B200, 200},
- {B300, 300},
- {B600, 600},
- {B1200, 1200},
- {B1800, 1800},
- {B2400, 2400},
- {B4800, 4800},
- {B9600, 9600},
- {B19200, 19200},
- {B38400, 38400},
-#ifdef B57600
- {B57600, 57600},
-#endif
-#ifdef B115200
- {B115200, 115200},
-#endif
-#ifdef B230400
- {B230400, 230400},
-#endif
-#ifdef B460800
- {B460800, 460800},
-#endif
- {0, 0}
-};
-
-int termcmp(struct termios *a, struct termios *b) {
- if (a->c_iflag != b->c_iflag || a->c_oflag != b->c_oflag ||
- a->c_cflag != b->c_cflag || a->c_lflag != b->c_lflag ||
- cfgetispeed(a) != cfgetispeed(b) || cfgetospeed(a) != cfgetospeed(b))
- return 1;
- return memcmp(a->c_cc, b->c_cc, sizeof(a->c_cc));
-}
-
-int get_serial_speed(int fd) {
- struct termios mode;
-
- if (!tcgetattr(fd, &mode)) {
- int i;
- speed_t speed;
-
- speed = cfgetospeed(&mode);
- for (i = 0; speed_map[i].value != 0; i++)
- if (speed_map[i].speed == speed)
- return speed_map[i].value;
- }
- return 0;
-}
-
-int compare_termios_to_console(char *dev, int *speed) {
- struct termios cmode, mode;
- int fd, cfd;
-
- cfd = open ("/dev/console", O_RDONLY);
- tcgetattr(cfd, &cmode);
- close(cfd);
-
- fd = open(dev, O_RDONLY|O_NONBLOCK);
- tcgetattr(fd, &mode);
-
- if (!termcmp(&cmode, &mode)) {
- *speed = get_serial_speed(fd);
- close(fd);
- return 1;
- }
- close(fd);
- return 0;
-}
-
-char *serial_tty_name(int type) {
- switch (type) {
- case PORT_8250...PORT_MAX_8250:
- return "ttyS";
- case PORT_PMAC_ZILOG:
- return "ttyPZ";
- case PORT_MPSC:
- return "ttyMM";
- case PORT_CPM:
- return "ttyCPM";
- case PORT_MPC52xx:
- return "ttyPSC";
- case PORT_IMX:
- return "ttymxc";
- case PORT_OMAP:
- return "ttyO";
- default:
- return NULL;
- }
-}
-
-char *check_serial_console(int *speed) {
- int fd;
- char *ret = NULL, *device;
- char twelve = 12;
- struct serial_struct si, si2;
- char *tty_name;
-
- memset(&si, 0, sizeof(si));
- memset(&si2, 0, sizeof(si));
-
- fd = open("/dev/console", O_RDWR);
- if (ioctl (fd, TIOCLINUX, &twelve) >= 0)
- goto out;
-
- if (ioctl(fd, TIOCGSERIAL, &si) < 0)
- goto out;
- close(fd);
-
- tty_name = serial_tty_name(si.type);
- if (!tty_name)
- goto out;
-
- asprintf(&device, "%s%d", tty_name, si.line);
- fd = open(device, O_RDWR|O_NONBLOCK);
- if (fd == -1)
- goto out;
-
- if (ioctl(fd, TIOCGSERIAL, &si2) < 0)
- goto out;
-
- if (memcmp(&si,&si2, sizeof(si)))
- goto out;
-
- *speed = get_serial_speed(fd);
- ret = device;
-out:
- close(fd);
- return ret;
-}
-
-int emit_console_event(char *dev, int speed) {
- char *args[] = { "initctl", "emit", "--no-wait", "fedora.serial-console-available", NULL, NULL, NULL };
-
- if (dev)
- asprintf(&args[4],"DEV=%s",dev);
- if (speed)
- asprintf(&args[5],"SPEED=%d",speed);
- execv("/sbin/initctl", args);
- return 1;
-}
-
-int main(int argc, char **argv) {
- char *device;
- int speed;
-
- if (argc < 2) {
- printf("usage: console_check <device>\n");
- exit(1);
- }
- chdir("/dev");
- device = argv[1];
- if (!strcmp(device, "console")) {
- device = check_serial_console(&speed);
- if (device)
- return emit_console_event(device, speed);
- } else if (compare_termios_to_console(device, &speed)) {
- return emit_console_event(device, speed);
- }
- return 0;
-}
diff --git a/src/console_init.c b/src/console_init.c
deleted file mode 100644
index 446433d0..00000000
--- a/src/console_init.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Copyright (c) 2008-2009 Red Hat, Inc. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License, version 2,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- */
-
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include <sys/ioctl.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#include <linux/kd.h>
-
-#include "shvar.h"
-
-static char *lang = NULL;
-static char *font = NULL;
-static char *acm = NULL;
-static char *unimap = NULL;
-static char *keymap = NULL;
-
-static int linux_console(int fd) {
- unsigned char twelve = 12;
-
- if (ioctl(fd, TIOCLINUX, &twelve) >= 0)
- return 1;
- return 0;
-}
-
-static int configured_as_utf8() {
- shvarFile *i18nfile = NULL;
-
- if ((i18nfile = svNewFile("/etc/sysconfig/i18n")) == NULL)
- return 1; /* assume UTF-8 */
-
- lang = svGetValue(i18nfile, "LANG");
- font = svGetValue(i18nfile, "SYSFONT");
- acm = svGetValue(i18nfile, "SYSFONTACM");
- unimap = svGetValue(i18nfile, "UNIMAP");
- svCloseFile(i18nfile);
- if (!lang)
- return 1;
- if (g_str_has_suffix(lang,".utf8") || g_str_has_suffix(lang,".UTF-8"))
- return 1;
- return 0;
-}
-
-static int read_keymap() {
- shvarFile *keyboard = NULL;
- char *tmp;
- struct stat sb;
-
- if (!stat("/etc/sysconfig/console/default.kmap",&sb)) {
- keymap = "/etc/sysconfig/console/default.kmap";
- return 0;
- }
-
- if ((keyboard = svNewFile("/etc/sysconfig/keyboard")) == NULL)
- return 0;
-
- tmp = svGetValue(keyboard, "KEYMAP");
- if (tmp)
- keymap = tmp;
- tmp = svGetValue(keyboard, "KEYTABLE");
- if (tmp) {
- if (keymap) free(keymap);
- asprintf(&keymap, "%s.map", tmp);
- }
- return 0;
-}
-
-static void set_font(char *device) {
- int pid;
-
- if ( (pid = fork()) == 0) {
- char *args[] = { "setfont", "latarcyrheb-sun16", "-C", NULL,
- NULL, NULL, NULL, NULL, NULL };
-
- if (font)
- args[1] = font;
- args[3] = device;
- if (acm) {
- args[4] = "-m";
- args[5] = acm;
- if (unimap) {
- args[6] = "-u";
- args[7] = unimap;
- }
- } else if (unimap) {
- args[4] = "-u";
- args[5] = unimap;
- }
- execv("/bin/setfont", args);
- exit(1);
- }
-}
-
-static void set_keyboard(int fd, int utf8) {
- if (ioctl(fd, KDSKBMODE, utf8 ? K_UNICODE : K_XLATE))
- perror("could not set keyboard mode");
-}
-
-static void set_terminal(int fd, int utf8) {
- if (utf8)
- write(fd, "\033%G", 3);
- else
- write(fd, "\033%@", 3);
-}
-
-static void set_keymap(int fd, int utf8) {
- int pid;
-
- if ((pid = fork()) == 0) {
- char *args[] = { "loadkeys", "-q", NULL, NULL, NULL };
- dup2(fd, 0);
- dup2(fd, 1);
-
- if (utf8) {
- args[2] = "-u";
- args[3] = keymap;
- } else {
- args[2] = keymap;
- }
- execv("/bin/loadkeys", args);
- exit(1);
- }
-}
-
-int main(int argc, char **argv) {
- char *device;
- int dev;
-
- if (argc < 2) {
- printf("usage: console_init <device>\n");
- exit(1);
- }
- chdir("/dev");
- device = argv[1];
- dev = open(device, O_RDWR);
- if (linux_console(dev)) {
- int utf8 = configured_as_utf8();
-
- set_keyboard(dev, utf8);
- set_terminal(dev, utf8);
- set_font(device);
- read_keymap();
- if (keymap)
- set_keymap(dev,utf8);
- }
- return 0;
-}
diff --git a/src/securetty.8 b/src/securetty.8
deleted file mode 100644
index 2aad6bca..00000000
--- a/src/securetty.8
+++ /dev/null
@@ -1,15 +0,0 @@
-.\" Copyright 2009 Petr Lautrbach (plautrba@redhat.com)
-.TH securetty 8 2009-10-27 "" "System Administration tools and Daemons"
-.SH NAME
-securetty \- add a tty to /etc/securetty
-.SH SYNOPSIS
-.B securetty \fItty\fP
-.SH DESCRIPTION
-.B securetty
-safely adds \fItty\fP to /etc/securetty.
-.SH NOTES
-.B securetty
-is not normally meant to be run by hand; it is invoked by the upstart job that
-sets up the system serial console.
-.SH "SEE ALSO"
-.BR securetty(5)
diff --git a/src/securetty.c b/src/securetty.c
deleted file mode 100644
index 59abb6e9..00000000
--- a/src/securetty.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright (c) 2008 Red Hat, Inc. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License, version 2,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-#include <unistd.h>
-
-#include <sys/mman.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-void alarm_handler(int num) {
- return;
-}
-
-int open_and_lock_securetty() {
- int fd;
- struct flock lock;
- struct sigaction act, oldact;
-
- lock.l_type = F_WRLCK;
- lock.l_whence = SEEK_SET;
- lock.l_start = 0;
- lock.l_len = 0;
-
- fd = open("/etc/securetty", O_RDWR);
- if (fd == -1) {
- syslog(LOG_ERR, "Couldn't open /etc/securetty: %s",strerror(errno));
- return -1;
- }
- act.sa_handler = alarm_handler;
- act.sa_flags = 0;
- sigaction(SIGALRM, &act, &oldact);
- alarm(2);
- while (fcntl(fd, F_SETLKW, &lock) == -1) {
- if (errno == EINTR) {
- syslog(LOG_ERR, "Couldn't lock /etc/securetty: Timeout exceeded");
- } else {
- syslog(LOG_ERR, "Couldn't lock /etc/securetty: %s",strerror(errno));
- }
- return -1;
- }
- alarm(0);
- sigaction(SIGALRM, &oldact, NULL);
- return fd;
-}
-
-int rewrite_securetty(char *terminal) {
- int fd;
-
- fd = open_and_lock_securetty();
- if (fd == -1)
- return 1;
- if (lseek(fd, 0, SEEK_END) == -1) {
- close(fd);
- syslog(LOG_ERR, "Couldn't seek to end of /etc/securetty: %s",strerror(errno));
- return 1;
- }
- write(fd, terminal, strlen(terminal));
- write(fd, "\n", 1);
- close(fd);
- return 0;
-}
-
-int check_securetty(char *terminal) {
- int fd, rc = 1;
- char *buf, term[PATH_MAX];
- struct stat sb;
-
- fd = open("/etc/securetty", O_RDONLY);
- if (fd == -1)
- goto out;
- fstat(fd, &sb);
- buf = mmap(NULL, sb.st_size, PROT_READ, MAP_SHARED, fd, 0);
- if (buf == ((caddr_t) -1)) {
- close(fd);
- return 1;
- }
- snprintf(term,PATH_MAX,"%s\n",terminal);
- if (!strncmp(buf,term,strlen(term))) {
- rc = 0;
- goto out_unmap;
- }
- snprintf(term,PATH_MAX,"\n%s\n",terminal);
- if (strstr(buf,term)) {
- rc = 0;
- goto out_unmap;
- }
-out_unmap:
- munmap(buf, sb.st_size);
-out:
- close(fd);
- return rc;
-}
-
-int main(int argc, char **argv) {
- if (argc < 2 ) {
- fprintf(stderr, "Usage: securetty <device>\n");
- exit(1);
- }
- openlog("securetty", LOG_CONS, LOG_DAEMON);
- if (check_securetty(argv[1]))
- return rewrite_securetty(argv[1]);
- else
- return 0;
-}