2

とすれば

telnetd は、Telnet 疑似端末デバイスをクライアントに割り当ててから、Telnet 疑似端末のスレーブ側を stdin、stdout、および stderr として持つログイン プロセスを作成することによって動作します。telnetd は、Telnet 疑似端末のマスター側を操作し、TELNET プロトコルを実装し、クライアントとログイン プロセスの間で文字を渡します。

telnet 接続が確立され、ユーザーが認証されると、ログイン プロセスでリモート ホストの IP アドレスとポート番号を取得しようとしています。

getpeername が成功した後の telnetd main() で、REMOTE_HOST と REMOTE_PORT の setenv を追加し、ログイン プロセスでこれらの変数にアクセスしようとしました。しかし、login.c でこれらの環境変数にアクセスできません。

私の質問は具体的すぎますが、誰かがすでに telnetd に環境変数を追加しようとしていて、ログイン プロセスでアクセスできる場合は、その方法を教えてください。ありがとう

4

1 に答える 1

1

問題は最終的に解決されました。telnetd では、環境がリセットされる多くの呼び出しがあります。また、startslave は、どの tty が作成され、ログイン プロセスがフォークされるかを示す関数です。そのため、startslave で getpeername(0, (struct sockaddr *)&from, &fromlen) を実行し、ログイン プロシージャをフォークする前に環境変数を追加しました。これで変数が利用可能になりました。

于 2012-11-26T11:45:22.613 に答える