Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ acucntrl(8C) — NEWS-os 4.1C

Media Vault

Software Library

Restoration Projects

Artifacts Sought

acucntrl(8C)  —  NEWS-OS Programmer’s Manual

名称

acucntrl − tty 回線のダイヤルイン/ダイヤルアウトを切り替える

形式

/usr/lib/uucp/acucntrl keyword ttyline

解説

acucntrl は端末回線を切り替え、ダイヤルインとダイヤルアウトに使えるようにします。 ダイヤルインの場合には、端末回線がモデムの制御をイネーブルにしており、 getty プロセスが存在し、ログインを待っているものとされます。 ダイヤルアウトの場合には、モデムの制御がディスエーブルされ、 getty プロセスは存在しません。

このプログラムは、setuid を root にして実行されなければなりません。

keyword としては、回線をダイヤルアウトにする場合には disable または dialout を、回線をダイヤルインにする場合には enable または dialin を指定します。

回線をダイヤルアウトの設定にした場合、 プロセスの実 uid のログイン名が /etc/utmp に大文字で書き込まれます。 これはその回線が使用中だということを示しており、 これもロッキング機構として機能するようになっています。 acucntrl は、その回線に対する /etc/utmp のエントリがナルでない場合、 またはそれがそのユーザのログイン名(大文字化されていてもいなくても) でない場合、あるいはプロセスがスーパーユーザとして実行されていない場合、 実行を拒否します。この最後の条件は、スーパーユーザがその回線の状態を クリアできるようにするために設けられています。

モデムの制御のオン/オフは、/dev/kmem の中を調べることによって処理されます。

4.2 BSD では、キャリアが回線上で検知された場合にも、 プログラムは回線のディスエーブルを拒否します。 これは、誰かがちょうどダイヤルインして接続したばかりでまだ ログインしていない場合の空白の時間を避けるためです。

ttyline は、tty∗ の形式でも /dev/tty∗ の形式でもかまいません。 ttyd? で始まらない名前の回線のイネーブル/ディスエーブルは、 プロセスの実 uid が 0 でない限りは禁じられており、 また、実 uid に伴うログイン名が uucp である場合にも禁じられています。 これは、機密保護上の理由からです。

ディスエーブルする場合の手順(ダイヤルアウトの手順)は次のとおりです。

1)入力の引数をチェックする

2)/etc/utmp を調べ、その回線を別のユーザが使っていないかどうかをチェックする

3)回線上のモデムの制御をディスエーブルする

4)デバイス上のキャリアをチェックする

5)デバイスの所有者を実 uid に変更する

6)/etc/ttys を編集し、適切な回線の最初の文字を 0 に変更する

7)プロセス 1 にハングアップを送ることによって、 init を促して getty をディスエーブルする

8)uid 名を大文字で /etc/utmp に書き込み、 そのデバイスが専有されたことをシステム全体に知らせる

9)DTR がオンであることを確認する

イネーブルする場合の手順(ダイヤルインの手順)は次のとおりです。

1)入力の引数をチェックする

2)/etc/utmp を調べ、その回線を別のユーザが使っていないかどうかをチェックする

3)回線上のモデムの制御がディスエーブルされていることを確認する

4)DTR をオフにし、回線のハングアップを確認する

5)排他的使用をクリアし、クローズモードでハングアップをセットすることで、 回線の設定を行う

6)モデムの制御をオンにする

7)/etc/ttys を編集し、適切な回線の最初の文字を 1 に変更する

8)プロセス 1 にハングアップを送ることによって、 init を促して getty をイネーブルする

9)/etc/utmp の uid 名をクリアする

履歴

最初の開発者は Allan Wikes(fisher!allan) です。

1983年の6月8日に W.Sebok(astrovax!wls) によって、 モデムの制御をオン/オフする際にカーネルをハックするのではなく、 Tsutomu Shimomura{astrovax,escher}!tsutomu が書いたプログラムから借用した サブルーチンを使って、カーネルのサービスを利用するように変更されました。

W.Sebok によって何度も作り直されました (ずたずたにハックされた)。

関連ファイル

/dev/kmem, /vmunix, /etc/ttys, /etc/utmp, /dev/tty∗

バグ

キャリアの検知には、NEWS-OS 2.X(4.2 BSD)では、TIOCMGET ioctl が必要になります。 しかし、dz と dmf ドライバが DH11 のモデム制御ビットのエミュレーションを 使っているにもかかわらず、この ioctl は vanilla 4.2 BSD の dh ドライバでは 実現されていません。この問題は、このプログラムでは解決されています。

モデムの制御とデバイスのオープンの間には、 いくらかの時間(現在は2秒)が必要です。これはおそらく、オープンの実行が、 許可されている getty と競合するためです。この時間は、負荷の大きいシステムでは 十分ではないでしょう。この問題と上記の dh ドライバの問題のため、 TIOCMGET ioctl が失敗したときにエラーメッセージを出さないようにしています。

以前、init プロセスには同期に関する同様の問題がありました。 ダイヤルインがディスエーブルされる際に、 init が /etc/utmp をクリアするまで、 プロセス名を大文字にしたものが /etc/utmp に書き込めないのです。 しかし、これがどのくらいの時間がかかるものか誰にもわからず、 負荷の大きいシステムではかなりの時間になることもあります。 この問題は、
1)名前を書き込み、2) init を促し、 3)プロセスが 1 秒待って、/etc/utmp からエントリがクリアされたかどうかを 繰り返しチェックするループに入り、 4)名前を再度書き込む、
という手順によって解決されました。

NEWS-OSRelease 4.1C

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026