[samba-jp:19737] Re: Samba3 + slapd2.3 大量ユーザの追加について

SATOH Fumiyasu fumiyas @ osstech.jp
2007年 9月 24日 (月) 22:16:02 JST


さとうふみやす @ OSS テクノロジです。

At Mon, 24 Sep 2007 21:39:47 +0900 (JST),
Takahiro Kambe wrote:
> > #!/bin/bash
> > IFS=":"
> > while read -r user pass; do
> >   ( echo "$pass"; echo "$pass" ) \
> >     |echo /usr/sbin/smbldap-useradd -a -m -A 0 "$user" \
> テスト用に echo が残ってませんか?  :-)

あちゃ〜、その通りです…。

> > ちなみに、/bin/sh 汎用に書くのは非常に(?)難しいと思う。
> ま、無理にシェル・スクリプトで書くこともないと思います。
> Sambaがインストールされてて、perlがインストールされてないって環境は
> 少ないと思いますし。

個人的にシェルのほうがパイプラインを書くのが楽なので、
この位の規模だと好んで使いますね。

Perl だと,

  open(CMD, "|${SMBLDAP_PASSWD} ${uname} > /dev/null");

とした場合、Perl の変数/定数にシェルのメタキャラクターが
含まれていたらと思うと気持悪くて使いたくないんですよね。
なので Perl の場合は IO::Pipe でパイプ作って、fork() して、
fdopen で stdio/stdout に dup して、exec {$command} ($command, @args);
…なんてやりたくなってしまいます。
(その場しのぎの場合はさすがにしませんが)

> 後、ユーザ名やパスワードにスペースやタブを許さない仕様にした方が、シェ
> ル・スクリプト版には良さそう(楽)な気もします。

では意地になって、改良版。:-)

#!/bin/bash
IFS=":"
while read -r user pass; do
  expr _"$user" : _'#' && continue
  expr _"$user" : _'[a-z][a-z0-9_\-]*$' >/dev/null ||
    { echo "$user: NG: invalid username"; continue; }
  (echo "$pass"; echo "$pass") \
    |/usr/sbin/smbldap-useradd -a -m -A 0 "$user" \
    >/dev/null
  if [ $? -eq 0 ]; then
    echo "$user: OK"
  else
    echo "$user: NG: smbldap-useradd failed"
  fi
done

-- 
-- Name: SATOH Fumiyasu / fumiyas @ osstech.co.jp
-- Business Home: http://www.OSSTech.co.jp
-- Personal Home: http://www.SFO.jp/blog/



samba-jp メーリングリストの案内