samba4 ntlm_auth を修正した

追記: samba4 のソースを元に派生させ直しました。
http://d.hatena.ne.jp/rti7743/20110510/1304856198




samba4 ntlm_auth がいろいろ残念なことになっていたので、いろいろ修正した。

一体何が残念なんですか?

samba4 の ntml_auth の一体何が残念なんですか?
認証ルーチンなのに、認証部分のソースがないことだよ。


source4/utils/ntlm_auth.c

/* Authenticate a user with a plaintext password */

static bool check_plaintext_auth(const char *user, const char *pass, 
				 bool stdout_diagnostics)
{
        return (strcmp(pass, opt_password) == 0);
}

修正1 認証部分を含めて、samba3 のソースを持ってきた。

いうまでもない。

修正2 とりあえずコンパイル通した。

ただし、ntlmssp 関係のライブラリの使用が変わっていて正常に動かんかった。
仕方ないので #if 0 でコメントアウトした。
もしかしたら、samba4 の ntlm_auth にあるソースをまぜまぜすると、動くかも?

修正3 コンソールから認証が通るようにした。

ふつーに認証できるはず。

ntlm_auth --username rti

修正4 --require-membership-of を動作するようにした。

samba3 とかには、特定のグループに所属していることという --require-membership-of って機能があるが、samba4 の実装から抜け落ちている様子。
なぜ抜け落ちさせたし。
仕方ないので、 wbinfo のソースをコピペってきて、エミュレーションするルーチンを ntlm_auth 側に作成した。
本来は、samba4 の問題なので、samba4 本体の修正が正しいんだけど、話しが大きくなるのが嫌だったので、ntlm_auth だけで完結させた。
samba4 の pam_winbind でも --require-membership-of が動かない問題があるみたいだけど、多分、samba4 の実装の問題だと思う。
samba3 でいう check_info3_in_group 相当のルーチンを実装すればいいんだろうけど、コードがすごく置き換わっているので実装は楽ではないだろうな。

ntlm_auth --username rti3 --require-membership-of=S-1-5-21-2558067586-3132001088-1936578106-1110

--helper-protocol の動作確認

とりあえず --helper-protocol=ntlm-server-1 の動作確認を行った。
問題なく動作している様子。

ソースとか遊び方

ルーチンをそう取替えなのでパッチとかそういう次元の話ではない。

wget http://ftp.samba.org/pub/samba/samba4/samba-4.0.0alpha15.tar.gz
tar zxvf samba-4.0.0alpha15.tar.gz
cd samba-4.0.0alpha15

#バックアップ
cd source4/utils/
mv ntlm_auth.c ntlm_auth_old.c_

#置換
wget http://rtilabs.net/files/2011_05_08/ntlm_auth.c
cd ../..

./configure
make
make install