※写真と本文は関係ありません。
この前の記事でやりたかったのは samba の conf から共有設定を抽出したいのでした。
CPAN に File::Samba というのがあった!
File-Samba – search.cpan.org
ちょっと古いか…。
エラーが出る。。
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
…………………