2010年12月16日木曜日

2次元配列を使用したテスト.pl

#!/usr/bin/perl
# Domain not found 通知スクリプト
# 2010.12.08 watari perl版 Ver.0.5
# 元々あった shell スクリプト版を元に
# 2重のドメイン検査及び、メーリングリストの
# 特定を盛り込む

# おまじない
use POSIX 'strftime';

# お約束
## Mailman コマンド
$findmember = "/path/to/mailman/bin/find_member";
$listowners = "/path/to/mailman/bin/list_owners";
## メール関連
$testmailaddr = "watari\@hogefuga";
$subject = "=?ISO-2022-JP?B?GyRCJWEhPCVqJXMlMCVqJTklSEdbQXclKCVpITxETENOGyhC?=";
## ログファイル
$logfile = "/path/to/mailman/logs/domain_errori_test";
## 一時ファイル
$tmpdata = "/tmp/den_tmp.data_test";
## smtp-failure
$errlog = "/path/to/mailman/logs/smtp-failure-test";
#$errlog = "/path/to/mailman/logs/smtp-failure";
## smtp
#$oklog = "/path/to/mailman/logs/smtp-test";

# 日付の準備
## 前日は time から 86400 を引く。
## その他の日は、 日数 x 86400 を引く。
###$ltime = time-86400;
## (検証用)
##日数の指定
$datecounts = 9;
#$datecounts = 1;
$ltime = time-(86400*${datecounts});
## 引っ掛けるログの対象日付
$taisho = strftime "%b %d", localtime($ltime);
$taisho2 = strftime "%b %d", localtime(time);

## 力技処理。実行時 (LANG=C; ./このスクリプト) で不要だが。
%month = (
    " 1月" => "Jan", " 2月" => "Feb", " 3月" => "Mar", " 4月" => "Apr",
    " 5月" => "May", " 6月" => "Jun", " 7月" => "Jul", " 8月" => "Aug",
    " 9月" => "Sep", "10月" => "Oct", "11月" => "Nov", "12月" => "Dec"
);

while ( my ( $key, $value ) = each ( %month ) ) {
    $taisho =~ s/$key/$value/g;
    $taisho2 =~ s/$key/$value/g;
}

## uniq 処理サブルーチン
## &f_uniq(元配列名,処理後配列名);
sub f_uniq {
    @sortedlines = sort @{$_[0]};
    if ( $sortedlines[0] =~ /.+/ ) {
        push(@{$_[1]}, $sortedlines[0]);
        for ( $i = 1; $i < @sortedlines; $i++ ) {
            if ( $sortedlines[$i] ne $sortedlines[$i-1]) {
                push(@{$_[1]}, $sortedlines[$i]);
            }
        }
    }
}


# お仕事開始
## 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]+/ ) {
                print "$ml_tmp[4] は、正しいメーリングリスト名ではありません。作業を中止します。\n";
                exit(1);
            } else {
                push(@errml  ???????

0 件のコメント:

コメントを投稿

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

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