forked from poppyred/1.6.x
/
exec.milter-greylist.logger.php
executable file
·127 lines (98 loc) · 2.96 KB
/
exec.milter-greylist.logger.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/usr/bin/php -q
<?php
$line=@implode("|", $argv);
$fd = fopen("php://stdin", "r");
$buffer = "";
ToSyslog("Open logger");
while (!feof($fd)) {
$buffer= fread($fd, 1024);
if(trim($buffer)<>null){
send_to_mysql(trim($buffer));
}
}
fclose($fd);
ToSyslog("Closing logger");
function ToSyslog($text){
$LOG_SEV=LOG_INFO;
if(function_exists("openlog")){openlog(basename(__FILE__), LOG_PID , LOG_SYSLOG);}
if(function_exists("syslog")){ syslog($LOG_SEV, $text);}
if(function_exists("closelog")){closelog();}
}
function send_to_mysql($buffer){
$dbpath="/home/artica/postfix/milter-greylist/logger/".date("YmdH").".miltergreylist.db";
if(!berekley_db_create($dbpath)){return;}
$db_con = @dba_open($dbpath, "w","db4");
if(!$db_con){
ToSyslog("send_to_mysql:: $dbpath failed connect");
@dba_close($db_con);
continue;
}
$results=explode(",",$buffer);
$md5=md5($buffer.time());
$instance=$results[0];
$publicip=$results[1];
$mailfrom=mysql_escape_string2($results[2]);
$rcpt=mysql_escape_string2($results[3]);
$failed=$results[6];
$Country=$results[7];
$HOUR=date('H');
$date=date("Y-m-d H:i:s");
$tablename="mgreyh_".date("YmdH");
$mailfromZ=explode("@",$mailfrom);
$rcptZ=explode("@",$rcpt);
$prefix="INSERT IGNORE INTO $tablename (`zmd5`,`ztime`,`zhour`,`mailfrom`,`instancename`,`mailto`,`domainfrom`,`domainto`,`senderhost`,`failed`) VALUES ";
$suffix="('$md5','$date','$HOUR','$mailfrom','$instance','$rcpt','{$mailfromZ[1]}','{$rcptZ[1]}','$publicip','$failed')";
$md5=md5($suffix);
dba_replace($md5,$suffix,$db_con);
@dba_close($db_con);
return;
}
function mysql_escape_string2($line){
$search=array("\\","\0","\n","\r","\x1a","'",'"');
$replace=array("\\\\","\\0","\\n","\\r","\Z","\'",'\"');
return str_replace($search,$replace,$line);
}
function berekley_db_create($db_path){
if(is_file($db_path)){return true;}
$db_desttmp = @dba_open($db_path, "c","db4");
@dba_close($db_desttmp);
if(is_file($db_path)){return true;}
ToSyslog("berekley_db_create:: Failed Creating $db_path database");
}
function events($text){
if(trim($text)==null){return;}
$pid=@getmypid();
$date=@date("H:i:s");
$logFile="/var/log/milter-greylist.RTT.debug";
$size=@filesize($logFile);
if($size>1000000){@unlink($logFile);}
$f = @fopen($logFile, 'a');
if($GLOBALS["VERBOSE"]){echo "$date:[".basename(__FILE__)."] $pid `$text`\n";}
@fwrite($f, "$date:[".basename(__FILE__)."] $pid `$text`\n");
@fclose($f);
}
function SEND_MYSQL($sql){
$bd=@mysql_connect(":/var/run/mysqld/mysqld.sock","root",null);
if(!$bd){
$des=@mysql_error();
$errnum=@mysql_errno();
ToSyslog("MySQL error: $errnum $des");
return;
}
$ok=@mysql_select_db("postfixlog",$bd);
if(!$ok){
$des=@mysql_error();
$errnum=@mysql_errno();
ToSyslog("MySQL error: $errnum $des");
@mysql_close($bd);
return;
}
$results=@mysql_query($sql,$bd);
if(!$results){
$des=@mysql_error();
$errnum=@mysql_errno();
ToSyslog("MySQL error: $errnum $des");
}
@mysql_close($bd);
}
?>