Annotation of 43BSD/usr.bin/uucp/acucntrl.8c, revision 1.1

1.1     ! root        1: .\"    @(#)acucntrl.8c 6.2 (Berkeley) 7/29/85
        !             2: .\"
        !             3: .TH acucntrl 8C "July 29, 1985"
        !             4: .UC 6
        !             5: .SH NAME
        !             6: acucntrl \- turn around tty line between dialin and dialout
        !             7: .SH SYNOPSIS
        !             8: .B /usr/lib/uucp/acucntrl
        !             9: keyword ttyline
        !            10: .SH DESCRIPTION
        !            11: .PP
        !            12: .I Acucntrl
        !            13: turns around terminal line, enabling it to be used for both dialin and dialout.
        !            14: On dialin a terminal line is assumed to have  modem control enabled and a getty
        !            15: process in existence waiting for logins.  On dialout modem control is disabled
        !            16: and there is no getty process.
        !            17: .PP
        !            18: This program must be run setuid to root.
        !            19: .PP
        !            20: .I keyword
        !            21: is chosen from the list:
        !            22: .I disable
        !            23: or
        !            24: .IR dialout ,
        !            25: to condition a line for dialout;
        !            26: and
        !            27: .I enable
        !            28: or
        !            29: .IR dialin ,
        !            30: to condition a line for dialin.
        !            31: .PP
        !            32: When the line is conditioned for dialing out, the login name of the real uid
        !            33: of the process is placed in /etc/utmp in capitals.
        !            34: This declares that the line is in use and acts as an additional locking
        !            35: mechanism.
        !            36: .I Acucntrl
        !            37: will refuse to act if the /etc/utmp entry for the line is not null,
        !            38: is not the the user's login name (capitalized or not),
        !            39: and if the process is not running as the superuser.
        !            40: The last condition is to allow the superuser to clear the state of the line.
        !            41: .PP
        !            42: Turning modem control on or off is handled by poking into /dev/kmem.
        !            43: It is currently implemented for dz, dh, and dmf lines.
        !            44: .PP
        !            45: Under 4.2 BSD the program will also refuse to disable a line if carrier is
        !            46: sensed on it.  This is to avoid the dead period where someone has just dialed
        !            47: in and made the connection but has not yet logged in.
        !            48: .PP
        !            49: .I Ttyline
        !            50: can be either of the form tty* or /dev/tty*.
        !            51: Enabling/disabling a line whose name does not begin with ttyd? is prohibited
        !            52: unless the real uid of the process is 0 or if the login name corresponding to
        !            53: the real uid is uucp.  This is a security precaution.
        !            54: .PP 
        !            55: Steps taken when disabling
        !            56: .RI ( i . e .
        !            57: setup for dialing out)
        !            58: .IP 1)
        !            59: check input arguments
        !            60: .IP 2)
        !            61: look in /etc/utmp to check that the line is not in use by another user
        !            62: .IP 3)
        !            63: disable modem control on line
        !            64: .IP 4)
        !            65: check for carrier on device
        !            66: .IP 5)
        !            67: change owner of device to real uid
        !            68: .IP 6)
        !            69: edit /etc/ttys,  changing the first character of the appropriate line to 0
        !            70: .IP 7)
        !            71: send a hangup to process 1 to poke init to disable getty
        !            72: .IP 8)
        !            73: post uid name in capitals in /etc/utmp to let world know device has been grabbed
        !            74: .IP 9)
        !            75: make sure that DTR is on
        !            76: .PP
        !            77: Steps taken when enabling
        !            78: .RI ( i . e .
        !            79: setup for dialin)
        !            80: .IP 1)
        !            81: check input arguments
        !            82: .IP 2)
        !            83: look in /etc/utmp to check that the line is not in use by another user
        !            84: .IP 3)
        !            85: make sure modem control on line is disabled
        !            86: .IP 4)
        !            87: turn off DTR to make sure line is hung up
        !            88: .IP 5)
        !            89: condition line: clear exclusive use and set hangup on close modes
        !            90: .IP 6)
        !            91: turn on modem control
        !            92: .IP 7)
        !            93: edit /etc/ttys,  changing the first character of the appropriate line to 1
        !            94: .IP 8)
        !            95: send a hangup to process 1 to poke init to enable getty
        !            96: .IP 9)
        !            97: clear uid name for /etc/utmp
        !            98: .SH HISTORY
        !            99: .PP
        !           100: First written by Allan Wilkes (fisher!allan)
        !           101: .PP
        !           102: Modified June 8,1983 by W.Sebok (astrovax!wls) to poke the kernel rather
        !           103: than use a kernel hack to turn on/off modem control, using a subroutine
        !           104: stolen from a program written by Tsutomu Shimomura {astrovax,escher}!tsutomu
        !           105: .PP
        !           106: Worked over many times by W.Sebok
        !           107: .RI ( i . e .
        !           108: hacked to death)
        !           109: .SH FILES
        !           110: /dev/kmem, /vmunix, /etc/ttys, /etc/utmp, /dev/tty*
        !           111: .SH BUGS
        !           112: .PP
        !           113: Sensing carrier requires the 4.2 BSD TIOCMGET ioctl call.  Unfortunately this
        !           114: ioctl is not implemented in the vanilla 4.2 BSD dh driver even though the
        !           115: dz and dmf drivers use an emulation of the DH11's modem control bits. This
        !           116: has been fixed here.
        !           117: .PP
        !           118: Some time (currently 2 seconds) is required between disabling modem control
        !           119: and opening the device.  This is probably because of a race with getty whose
        !           120: open is finally being allowed to complete.  This time interval may not be
        !           121: enough on a loaded system.  Because of this problem and the above problem with
        !           122: the dh driver there is deliberately no error message given when the TIOCMGET
        !           123: ioctl fails.
        !           124: .PP
        !           125: Previously there was similar synchronization problem with the init process.
        !           126: When dialins are disabled the capitalized name of the process cannot be posted
        !           127: into /etc/utmp until init has finished clearing /etc/utmp.  However one does
        !           128: not know how long that will take, and, on a loaded system,  it can take quite
        !           129: a while.  This was solved by the strategy of 1) posting the name, 2) poking
        !           130: init, 3) going into a loop where the process repeatedly waits a second and
        !           131: checks whether the entry has been cleared from /etc/utmp, and 4) posting the
        !           132: name again.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.