Re: util-linux & agetty vs. Sarge
Jak podają anonimowe źródła, przepowiedziano, że Karol Czachorowski napisze:
> > U mnie dzieje się podobnie, chociaz ostatnio nie dostaje już
> > komunikatów
> > (respawning too fast) problemów z su też nie wykryłem. Natomiast
> > długie oczekiwanie na logowanie po uprzednim wylogowaniu, zauważyłem
> > na wszystkich konsolach prócz tty1. (util-linux 2.12-7)
> U mnie jest zdecydowanie źle (ale problemów z su nie zauważyłem u
> siebie).
Jak np. zabijesz X przez CTRL+ALT+BACKSPACE i zdążysz uruchomić
su zanim ekran przełączy się na tekstowy.
[...]
> Czyli jedynym rozwiązaniem jest przebudowanie pakietu bez tej poprawki?
> Czy jest może gdzieś paczka bez tego?
http://zeus.polsl.gliwice.pl/~jfk/tmp/util-linux_2.12-7.01_i386.deb
albo poprawka w załączeniu
Pozdrawiam
--
Jacek Kawa **Everything happens for a reason,
except possibly football.** ['Thief of time']
--- login-utils/agetty.c.orig 2004-07-05 09:42:13.000000000 +0200
+++ login-utils/agetty.c 2004-07-05 09:45:26.000000000 +0200
@@ -29,9 +29,6 @@
#include <getopt.h>
#include <time.h>
#include <sys/file.h>
-#include <sys/ioctl.h>
-#include <sys/vt.h>
-#include <linux/tty.h>
#include "xgethostname.h"
#include "xstrncpy.h"
#include "nls.h"
@@ -634,74 +631,6 @@
if ((st.st_mode & S_IFMT) != S_IFCHR)
error(_("/dev/%s: not a character device"), tty);
- /*
- * Try to avoid opening a vt that is already open, as this will
- * mean that the keyboard will be unusable.
- *
- * Unfortunately, all the kernel gives us to find out is an ioctl
- * for the next available vt. As the kernel doesn't open the vt for
- * you with the ioctl, there is still a chance of both processes
- * opening the same vt, but this check is far better than nothing at
- * all.
- *
- * Similar to the check added to gdm.
- */
- if (strncmp(tty,"tty",3) == 0)
- {
- char *end;
- int vtno;
-
- vtno = strtol(tty+3,&end,10);
- if (end != tty+3 && *end == '\0' && vtno > 1)
- {
- int fd;
- int newvtno;
- int fds[MAX_NR_CONSOLES];
- int vt_cnt = 0;
- int i;
-
- for ( i = 0 ; i < MAX_NR_CONSOLES ; i++ )
- fds[i] = -1;
-
- if ((fd = open("/dev/tty0", O_WRONLY, 0) ) < 0
- && errno != ENOENT)
- error(_("/dev/tty0: cannot open: %m"));
-
- if (fd >= 0) do
- {
- if ((ioctl(fd, VT_OPENQRY, &newvtno ) < 0))
- error(_("failed to query next available vt"));
-
- if (newvtno == -1)
- error(_("all vts are in use"));
-
- if (newvtno > vtno)
- error(_("/dev/%s: already in use"), tty);
-
- if (newvtno < vtno)
- {
- char vtname[TTY_NAME_MAX+3];
-
- sprintf( vtname, "tty%d", newvtno );
-
- if ((fds[vt_cnt++] =
- open(vtname, O_RDWR|O_NONBLOCK, 0)) < 0)
- {
- error(_("/dev/%s: cannot open: %m"), tty);
- }
- }
- } while (newvtno != vtno);
-
- close(fd);
- for ( i = 0 ; i < MAX_NR_CONSOLES ; i++ )
- {
- if (fds[i] == -1)
- break;
- close(fds[i]);
- }
- }
- }
-
/* Open the tty as standard input. */
(void) close(0);
Reply to: