2010年12月16日木曜日

perl メモ

mailman の Domain not found スクリプトより

## Domain not found のエラーから、該当するメールアドレスとメーリングリスト名を抽出
open(SMTPERR, "< $errlog") || die "Error: $errlog \n";
while() {
    chomp;
    if ( $_ =~ /$taisho/ && $_ =~ /Domain not found/ && $_ =~ /refused/ ) {
        @array = split( / +/, $_);
        # 該当メールアドレスの抽出
        $array[11] =~ s/://g;
        if ( $array[11] !~ /^[^@]+@[^.]+\..+/ ) {
            print "$array[11] は、メールアドレスではありません。作業を中止します。\n";
            exit(1);
        } else {
            # メーリングリストの抽出
            $array[19] =~ s///g;
            @ml_tmp = split(/\./, $array[19]);
            $ml_tmp[4] =~ s/\@cc//g;
            if ( $ml_tmp[4] !~ /^[a-z][a-z|0-9]*\-[a-z|0-9]+/ || $ml_tmp[4] !~ /mailman/ ) {
                print "$ml_tmp[4] は、正しいメーリングリスト名ではありません。作業を中止します。\n";
                exit(1);
            } else {
                ## $dnfml[数][0] が、メールアドレス、$dnfml[数][0] が、ML名
                @dnfml = (
                    [ "$array[11]", "$ml_tmp[4]" ]
                );
            }
        }
    }
}
close(SMTPERR);

foreach(@errlogdata) {
    if( $_ =~ /$taisho/ && $_ =~ /$eaddr/ && $_ =~ /refused/ && $_ =~ /Domain not found/ ) {
        @array = split(/ +/, $_);
        # メーリングリストの抽出
        $array[19] =~ s///g;
        @ml_tmp = split(/\./, $array[19]);
        $ml_tmp[4] =~ s/\@cc//g;
        if ( $ml_tmp[4] !~ /^[a-z][a-z|0-9]*\-[a-z|0-9]+/ ) {
            print "$ml_tmp[4] は、正しいメーリングリスト名ではありません。作業を中止します。\n";
            exit(1);
        } else {
            $ml_pre = $ml_tmp[4];
        }
    }
}


### 多次元配列用uniq処理
### @hoge[i] までが配列名なので、

途中か?

0 件のコメント:

コメントを投稿

DNS named.root 更新確認スクリプト

#!/bin/bash # DNSのnamed.rootファイルの更新確認スクリプト # 最新版のnamed.rootファイルを取得し、差分を確認する。 # 更新履歴 # 2014.02.07 watari # お約束 export LANG=C ## 実行ディレクトリ #PR...