«前の日記(2011-05-04) 最新 次の日記(2011-05-27)» 編集

meta's blog - The Power To Serve

筆者について

FreeBSDを通じてOSSにささかな貢献を。

OSS活動をご支援いただける方を募集しています


2011-05-25

net/xrdp でログイン名が正しくセットされない問題の修正パッチ

FreeBSDで net/xrdp (xrdp-0.6.0.20110117cvs)を使用していると、ログイン名が正しくセットされず、以下の例のようにMySQLなどのアプリケーションで問題になる場合があります。

[meta@rose ~]$ mysql
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

この例では、ユーザ 'meta' でログインしているのに mysql が 'root' でログインしようとしてしまい、期待した動作をさせるためには mysql -u `whoami` などのオプションを付ける必要があります。この原因は `id -p` などを実行してみるとわかります。

[meta@rose ~]$ id -p
login  root
uid    meta
groups meta

id コマンドの出力を見ると login が root になっています。ユーザ名の取得に getlogin() システムコールを使用しているため、setsid()/setlogin() によって正しくログインセッションが定義されていないと FreeBSD-SA-02:07.k5su や mysql などのアプリケーションで問題になります。これは xrdp がもともと setlogin() システムコールの存在しない Linux で開発されていたために、FreeBSD 上で xrdp を実行する際に顕在化する問題です。

FreeBSD-SA-02:07.k5su で言及されているように、getlogin() はプロセスを実行するユーザ名と異なるログイン名を返してしまう場合があるため、値のチェックなしで使用するべきではないのですが、ログインセッションを生成しない xrdp-sesman にも問題があります。

この問題を解決するため、xrdp-sesman がウィンドウマネージャを起動する際に新たなログインセッションを生成するように修正するパッチを作成しました。このパッチは OpenSSH のコードを利用しているため、OpenSSH のライセンスに従ってライセンスされています。

パッチは既にPR済なので、近いうちに Ports tree へコミットされるでしょう。

2011年10月27日 追記

このパッチにはバグがあったため、修正版のパッチを submit しました。 詳しくは 10月27日の記事を参照してください。