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