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