Getty does not process the :de: delay unless it is present in the default terminal class. This is somewhat annoying, since a 15 second delay can be most useful with a modem, but is generally unappreciated on the console. Here's what happens: As getty enters its main loop, it encounters the following code: /* * if a delay was specified then sleep for that * number of seconds before writing the initial prompt */ if (first_sleep && DE) { sleep(DE); /* remove any noise */ (void)tcflush(STDIN_FILENO, TCIOFLUSH); } first_sleep = 0; setttymode(tname, 0); Until the setttymode(), only the default gettytab terminal class has been loaded. Setttymode() contains the following code: gettable(tname, tabent); if (OPset || EPset || APset) APset++, OPset++, EPset++; setdefaults(); After which the correct terminal class is loaded. Fix: Initializing the global class values from within setttymode() is not very pretty, but was put there to move the tty-mode specific processing of the APset and other flags there. Gettable() should be moved to the top of the main loop, followed by a setdefaults(). How-To-Repeat: Set up hylafax to run a getty(8) upon detection of a data call, invoking getty via "dly.152000 -", where the dly.152000 class has a non-null de field value. Watch the connection process and observe that getty did not wait as required. Notice that for once this bug isn't in hylafax.
State Changed From-To: open->feedback Does this problem still occur in newer versions of FreeBSD, such as 4.3-RELEASE?
State Changed From-To: feedback->suspended Originator's comments are in the Audit-Trail. Awaiting fix and committer.
Adding to Audit-Trail. On Sun, Jul 22, 2001 at 01:38:17AM -0400, Cyrus Rahman wrote: > On 22-Jul-01 mike@FreeBSD.org wrote: > > Synopsis: Getty can fail to observe :de: specification unless present in > > default > > > > State-Changed-From-To: open->feedback > > State-Changed-By: mike > > State-Changed-When: Sat Jul 21 18:46:47 PDT 2001 > > State-Changed-Why: > > > > Does this problem still occur in newer versions of FreeBSD, > > such as 4.3-RELEASE? > > > > http://www.FreeBSD.org/cgi/query-pr.cgi?pr=18181 > > As I recall, the problem is that the code (in main.c): > > for (;;) { > /* > * if a delay was specified then sleep for that > * number of seconds before writing the initial prompt > */ > if (first_sleep && DE) { > sleep(DE); > /* remove any noise */ > (void)tcflush(STDIN_FILENO, TCIOFLUSH); > } > first_sleep = 0; > > setttymode(tname, 0); > > expects to find the correct delay value in DE. However, this is no longer set > this early in the loop, since the code that would load it with the value > from gettytab: > > gettable(tname, tabent); > setdefaults(); > > has been moved into setttymode(), which isn't run until after the test. > > Although not elegant, I fixed the problem by adding an extra > > gettable(tname, tabent); > setdefaults(); > > at the top of the loop before the first lookup of DE. > > Inspection of the latest copy of getty/main.c indicates that the problem has > not been corrected in 1.28.2.3. > > Cyrus >
State Changed From-To: suspended->patched The bug has been fixed in CURRENT. The fix will be merged to STABLE in a month. Thank you! And excuse us for it took so long to get rid of this bug.
Responsible Changed From-To: freebsd-bugs->yar MFC reminder.
State Changed From-To: patched->closed This bug has been fixed along with some other getty(8) bugs.