[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: