たまには技術的なことも書いてみる。pythonを用いてLDAPでアカウント管理をやっているのだがパスワードを生成するところがスマートにやれなかった。
どうしたかというと通常パスワードはslappasswdをsambaパスワードは(なんとびっくり)perlのCrypt::SmbHashモジュールを呼び出していた。
データ初期化するときは問題ないのだけどユーザにパスワードを変更させるインターフェースを作る場合、そのシステムにldap環境がインストールされていないとできない問題が生じた。
ググルとこんな投稿があったけどさくっと後が続かない。
さらにググルと貴重なソースを発見した。
上記によると単純にshaで生成する場合も以下のようにbase64でエンコードしなければならないということ。
base64.encodestring(sha.new(str(pwd)).digest())
ところでよくよくソースを読んでいるとsmbpasswdなるモジュールを利用していることに気づく。
これはとおもって調べたらpy-smbpasswdのサイトにたどり着いた。
Linux用にはどっかにspecファイルがあったのでそれを修正してビルドし(ただしDebianは野良ビルド)、Windows用にはC++ Builderでコンパイルした。
これでユーザーが通常パスワード、sambaパスワード両方変更できるようになった。
便利過ぎ。
需要ないかもしれないけどWindowsバイナリアップしとく。