[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 メーリングリストの案内