The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Патч для getty и login для настройка таймаута (dial-in getty timeout patch)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: dial-in, getty, timeout, patch,  (найти похожие документы)
Date: Sun, 15 Dec 2002 10:45:03 +0500 From: Eugene Grosbein <Eugene_Grosbein@f1.n5006.z2.fidonet.org> Newsgroups: ftn.ru.unix.bsd Subject: Патч для getty и login для настройка таймаута EG>> getty из линии получил мусор, дал этот мусор login'у в качестве имени, EG>> login ждет пароля с линии. Ждать будет 300 секунд, это не EG>> настраивается. Я запатчил getty и login, чтобы можно было настраивать EG>> из /etc/ttys этот таймаут. AM> Поделись, что ли где патч посмотpеть. Или так закинь... AM> Вобщем, я так понял, вышеописанное - это ноpмальное явление. Т.е. нужно AM> подождать 5 мин. и "само pассосется". Может заодно конфигами поделишься? В /etc/gettytab создаешь настройку с таймаутом на ввод имени после коннекта. to#10 это десять секунд на ввод имени. Это штатная фича, работает на штатном getty. stdh.115200|115200-baud:\ :np:sp#115200:to#10: Патченные getty и login идут в /usr/local/bin и /usr/local/libexec соответственно. Патчи нужны, чтобы менять таймаут на ввод пароля. В /etc/ttys на порт вешаем патченный getty, который будет запускать /usr/local/bin/login вместо /usr/bin/login: ttyd0 "/usr/local/libexec/getty -t 10 stdh.115200" dialup on insecure Патченный getty принимает параметр -t <timeout> и передает его в login, а login умеет его принять и использовать для ограничения ввода пароля. Сам патч ниже. Лучше всего применять так: mkdir -p pgetty/libexec/getty mkdir -p pgetty/usr.bin/login cd pgetty cp -r /usr/src/libexec/getty libexec/ cp -r /usr/src/usr.bin/login usr.bin/ patch </path/to/patch cd libexec/getty && make depend && make all install cd .../../usr.bin/login && make depend && make all install Сам патч: Index: libexec/getty/Makefile
RCS file: /usr/local/cvsroot/pgetty/libexec/getty/Makefile,v retrieving revision 1.1.1.2 retrieving revision 1.2 diff -u -r1.1.1.2 -r1.2 - --- libexec/getty/Makefile 8 May 2002 09:53:37 -0000 1.1.1.2 +++ libexec/getty/Makefile 15 Dec 2002 05:02:20 -0000 1.2 @@ -6,6 +6,7 @@ DPADD= ${LIBUTIL} LDADD= -lutil MAN= gettytab.5 ttys.5 getty.8 +BINDIR= /usr/local/libexec # for the paranoid: #CFLAGS+= -Wall -Wstrict-prototypes -Wno-unused -Wwrite-strings Index: libexec/getty/main.c
RCS file: /usr/local/cvsroot/pgetty/libexec/getty/main.c,v retrieving revision 1.1.1.2 retrieving revision 1.11 diff -u -r1.1.1.2 -r1.11 - --- libexec/getty/main.c 8 May 2002 09:53:37 -0000 1.1.1.2 +++ libexec/getty/main.c 8 May 2002 09:58:22 -0000 1.11 @@ -131,6 +131,7 @@ #define puts Gputs +static void dying __P((void)); static void dingdong __P((int)); static int getname __P((void)); static void interrupt __P((int)); @@ -151,9 +152,16 @@ jmp_buf timeout; static void +dying() +{ + syslog(LOG_INFO,"finished"); +} + +static void dingdong(signo) int signo; { + syslog(LOG_INFO,"alarm after %d",TO); alarm(0); longjmp(timeout, 1); } @@ -189,11 +197,14 @@ int first_sleep = 1, first_time = 1; struct rlimit limit; int rval; - + char* login_timeout=NULL; /* don't specify timeout */ + /* for login(1) by default */ + signal(SIGINT, SIG_IGN); signal(SIGQUIT, SIG_IGN); openlog("getty", LOG_ODELAY|LOG_CONS|LOG_PID, LOG_AUTH); + atexit(&dying); gethostname(hostname, sizeof(hostname) - 1); hostname[sizeof(hostname) - 1] = '\0'; if (hostname[0] == '\0') @@ -210,8 +221,17 @@ gettable("default", defent); gendefaults(); tname = "default"; + if(argc > 2 && strcmp(argv[1],"-t") == 0) { + login_timeout=argv[2]; + argc-=2; + argv+=2; + } + if (argc > 1) tname = argv[1]; + if(login_timeout!=NULL) + syslog(LOG_INFO,"started on %s with timeout %s", + tname,login_timeout); /* * The following is a work around for vhangup interactions @@ -276,7 +296,6 @@ } } } - /* Start with default tty settings */ if (tcgetattr(STDIN_FILENO, &tmode) < 0) { syslog(LOG_ERR, "tcgetattr %s: %m", ttyn); @@ -410,8 +429,13 @@ limit.rlim_max = RLIM_INFINITY; limit.rlim_cur = RLIM_INFINITY; (void)setrlimit(RLIMIT_CPU, &limit); - execle(LO, "login", AL ? "-fp" : "-p", name, + if(login_timeout) + execle(LO, "login", "-t", login_timeout, + AL ? "-fp" : "-p", name, (char *) 0, env); + else + execle(LO, "login", AL ? "-fp" : "-p", name, + (char *) 0, env); syslog(LOG_ERR, "%s: %m", LO); exit(1); } Index: libexec/getty/pathnames.h
RCS file: /usr/local/cvsroot/pgetty/libexec/getty/pathnames.h,v retrieving revision 1.1.1.2 retrieving revision 1.3 diff -u -r1.1.1.2 -r1.3 - --- libexec/getty/pathnames.h 8 May 2002 09:53:37 -0000 1.1.1.2 +++ libexec/getty/pathnames.h 8 May 2002 09:58:22 -0000 1.3 @@ -37,4 +37,4 @@ #include <paths.h> #define _PATH_GETTYTAB "/etc/gettytab" -#define _PATH_LOGIN "/usr/bin/login" +#define _PATH_LOGIN "/usr/local/bin/login" Index: usr.bin/login/Makefile
RCS file: /usr/local/cvsroot/pgetty/usr.bin/login/Makefile,v retrieving revision 1.1.1.2 retrieving revision 1.2 diff -u -r1.1.1.2 -r1.2 - --- usr.bin/login/Makefile 8 May 2002 10:08:28 -0000 1.1.1.2 +++ usr.bin/login/Makefile 15 Dec 2002 05:02:20 -0000 1.2 @@ -1,6 +1,7 @@ # From: @(#)Makefile 8.1 (Berkeley) 7/19/93 # $FreeBSD: src/usr.bin/login/Makefile,v 1.31.2.2 2001/07/16 07:02:39 markm Exp $ +BINDIR=/usr/local/bin PROG= login SRCS= login.c login_access.c login_fbtab.c MAN= login.1 login.access.5 @@ -9,6 +10,7 @@ DPADD= ${LIBUTIL} ${LIBCRYPT} LDADD= -lutil -lcrypt +NOPAM= yes .if !defined(NOPAM) CFLAGS+= -DUSE_PAM Index: usr.bin/login/login.c
RCS file: /usr/local/cvsroot/pgetty/usr.bin/login/login.c,v retrieving revision 1.1.1.2 retrieving revision 1.4 diff -u -r1.1.1.2 -r1.4 - --- usr.bin/login/login.c 8 May 2002 10:08:28 -0000 1.1.1.2 +++ usr.bin/login/login.c 8 May 2002 10:10:40 -0000 1.4 @@ -183,7 +183,6 @@ exit(0); } (void)signal(SIGALRM, timedout); - (void)alarm(timeout); (void)setpriority(PRIO_PROCESS, 0, 0); openlog("login", LOG_ODELAY, LOG_AUTH); @@ -201,7 +200,7 @@ uid = getuid(); euid = geteuid(); egid = getegid(); - while ((ch = getopt(argc, argv, "fh:p")) != -1) + while ((ch = getopt(argc, argv, "fh:pt:")) != -1) switch (ch) { case 'f': fflag = 1; @@ -250,6 +249,7 @@ case 'p': pflag = 1; break; + case 't': timeout=atoi(optarg); break; case '?': default: if (!uid) @@ -258,6 +258,7 @@ } argc -= optind; argv += optind; + (void)alarm(timeout); if (*argv) { username = *argv;

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2020 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру