この前の記事でやりたかったのは samba の conf から共有設定を抽出したいのでした。
CPAN に File::Samba というのがあった!
ちょっと古いか…。
エラーが出る。。
Use of uninitialized value in substitution (s///) at /usr/lib/perl5/site_perl/5.8.6/File/Samba.pm line 364,line 109. Use of uninitialized value in substitution (s///) at /usr/lib/perl5/site_perl/5.8.6/File/Samba.pm line 364, line 115.
未定義の変数を置換してますエラーが出てたので修正。
[root@sv dirlist]# diff -Nur Samba.pm_org /usr/lib/perl5/site_perl/5.8.6/File/Samba.pm --- Samba.pm_org 2005-07-07 22:56:17.000000000 +0900 +++ /usr/lib/perl5/site_perl/5.8.6/File/Samba.pm 2010-09-28 10:47:44.000000000 +0900 @@ -361,7 +361,8 @@ { my($key,$value) = split('=',$_,2); $key =~ s/\s+$//; - $value =~ s/^\s+//; + #$value =~ s/^\s+//; + $value =~ s/^\s+// if(defined $value); if($isGlobal) { $self->{_global}->{$key}=$value;
とりあえず動いた。
flemode と group を知りたかったので、こんな感じ。
[root@sv dirlist]# cat ./File_samba.pl #!/usr/bin/perl use strict; use warnings; use File::Samba; my $smb = File::Samba->new("/etc/samba/smb.conf"); # 共有のリスト my @list = $smb->listShares; # filemode を調べる。 sub check_filemode{ my @st = stat "@_"; my $mode = substr((sprintf "%03o", $st[2]), -3); return $mode; } # gid を group に変更。 sub check_gname{ my @st = stat "@_"; my $gid = $st[5]; my $gname = getgrgid $gid; return $gname; } foreach my $i ( @list ) { print "共有名は " , "$i" , "\n"; my $path = $smb->value("$i","path"); my $comment = $smb->value("$i","comment"); if ( $comment ){ print "コメント : " , "$comment" , "\n"; }else{ print "コメント : " , "\n"; } print "filemode : " , &check_filemode( $path ) , "\n"; print "group : " , &check_gname( $path ) , "\n"; }
このような出力になる。
[root@sv dirlist]# ./File_samba.pl ………………… 共有名は 11 コメント : "受け渡し専用" filemode : 775 group : smbusers 共有名は web コメント : "送付文書" filemode : 775 group : group10 …………………