[samba-jp:19732] Re: Samba3 + slapd2.3 大量ユーザの追加について
Takahiro Kambe
taca @ back-street.net
2007年 9月 24日 (月) 20:15:53 JST
In message <20070924104249.GA22192 @ ns.ribbon.or.jp>
on Mon, 24 Sep 2007 19:42:49 +0900,
ribbongw master <ribbon @ ns.ribbon.or.jp> wrote:
> On Mon, Sep 24, 2007 at 03:34:52PM +0900, 吉村 広幸 wrote:
> >
> > おかげさまで、とりあえずのユーザ作成スクリプトが出来ました。
> >
> > # cat add-user.pl
> > #!/usr/bin/perl -w
> >
> > while (<>) {
> > chop;
> > ($uname,$pass) = split(/:/);
> > `/usr/sbin/smbldap-useradd -a -m -A 0 $uname`;
> > open(CMD, "| /usr/sbin/smbldap-passwd $uname > /dev/null");
> > print CMD "$pass\n$pass\n";
> > close(CMD);
> > print "add user $uname\n";
> > }
> >
>
> このスクリプト、wiki.samba.gr.jp の技術情報ページに転載して
> よろしいでしょうか?
動作検証していませんが、ちょっとだけ格好を付けてみました。
(もっと厳密にするなら、ユーザ名やパスワードに使用できる文字の検査や、
ユーザ名にシェルのメタ文字が使用されていないことを確認すべきでしょう。)
----------------------------------------------------------------
#!/usr/bin/perl -w
use strict;
use File::Basename;
use Getopt::Std;
my($SMBLDAP_USERADD, $SMBLDAP_PASSWD, $myname, $verbose, $r);
$SMBLDAP_USERADD = "/usr/sbin/smbldap-useradd";
$SMBLDAP_PASSWD = "/usr/sbin/smbldap-passwd";
$verbose = undef;
$myname = undef;
sub usage {
my($status) = @_;
printf("%s: [-h] [-v]\n", $myname);
exit($status);
}
sub parseopts {
my($k, %opts);
getopts('hv', \%opts);
foreach $k (keys %opts) {
if ($k eq 'h') {
usage(0);
} elsif ($k eq 'v') {
$verbose = 1;
}
}
}
sub addusers {
my($uname, $pass, $status, $rcode);
$rcode = 0;
while (<>) {
chomp;
($uname, $pass) = split(/:/, $_, 2);
$pass =~ s/[\r\n]+$//;
$status = system($SMBLDAP_USERADD, "-a", "-m", "-A", "0", $uname);
if ($status == -1) {
$rcode = 2;
last;
}
$status >>= 8;
$rcode |= 0;
if ($status == 0) {
open(CMD, "|${SMBLDAP_PASSWD} ${uname} > /dev/null");
print(CMD "$pass\n$pass\n");
close(CMD);
print "add user $uname\n" if ($verbose);
}
}
return $rcode;
}
$myname = basename($0);
parseopts();
$r = addusers();
exit($r);
----------------------------------------------------------------
--
神戸 隆博 / Takahiro Kambe
samba-jp メーリングリストの案内