samba の共有設定を抽出する。


くろぬこ



※写真と本文は関係ありません。


この前の記事でやりたかったのは 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
…………………