BlueonyxのcmuExportがバグっているようだ(実害無し)

  • 投稿日:
  • by
  • カテゴリ:  

Blueonyxはホスティングサーバ管理ソフトです。最近仕事で触り初めました。

ユーザデータの移行等で使用する/usr/sbin/cmuExportを使用してバックアップを取得していて気づいたんですが、実行ログのcmu.logにlsコマンドのエラーが出力されていました。ちょっと気持ち悪いので調査してみることに。

具体的な事象は、ディレクトリ名に空白文字が含まれていると、cmu.logにlsコマンドのエラーが出力されます。また、空白文字が含まれているディレクトリが空の場合、そのディレクトリがバックアップ対象になりません。

cmu.log抜粋

Scanout: ls: Folder: No such file or directory
Scanout: ls: Network: No such file or directory
Scanout: ls: Trash: No such file or directory

空でないディレクトリのディレクトリ名に空白文字が含まれていてもバックアップ対象になります(期待される動作)が、エラーは出ます(期待されない動作)。

cmuExportはPerlで書かれていたので、ソースを追ってみたところ/usr/cmu/perl/Archive.pmの以下のコード(l.361)でエラーが出ていることが分かりました。

/usr/cmu/perl/Archive.pm抜粋

my $dirtest = `ls -al $f->{name} | wc -l`;

前後のコードはこんな感じで、空のディレクトリのみをバックアップ対象に追加するためのコードのようです。

my @files; 
my $file_list;
foreach my $f (@{ $fHash->{file} }) {
    if (-d $f->{name}) {
        my $dirtest = `ls -al $f->{name} | wc -l`; 
        chomp($dirtest);
        if ($dirtest eq '3') {
            # Empty directory. Not skipping.
            #warn "Not skipping dir $f->{name}";
        }       
        else {  
            # Directory not empty. So we have it's files in the file-list. Skipping directory name. 
            #warn "Skipping dir $f->{name}";
            next;   
        }       
    }       
    push(@files, $f->{name});
    $file_list .= $f->{name} . "\n"; 
}

# Write tempfile with $file_list:
$fileListTmp = "/tmp/cmu-files.dat";
warn "Creating $fileListTmp\n";
open(my $fh, '>', $fileListTmp);
print $fh $file_list;
close $fh;

以下のように、”(ダブルクオート)で括ってあげることで対処可能ですが、そもそも空白文字の含まれたディレクトリ名は考慮されていないのだろうか?

my $dirtest = `ls -al "$f->{name}" | wc -l`;

実害はないものの、/home/sites/www.<domainName>/users/<userName>配下にある、"Network Trash Folder"で必ずエラーになるため、気持ちが悪い。

このディレクトリはユーザを作成すると自動的に作成されるようで、cmuExportでデータバックアップを取得すると必ずこのエラーが出てしまいます。