瀏覽代碼

Improvements to forwarding hosts in Postfix

- No more premature EOF and no more leaking of bash processes
- Log result
- Correctly treat non-CIDR entries
- Adapt to schema change from df71e97
- Correctly report SQL failure
Michael Kuron 8 年之前
父節點
當前提交
894d6234e9
共有 2 個文件被更改,包括 10 次插入6 次删除
  1. 4 3
      data/conf/postfix/whitelist_forwardinghosts.sh
  2. 6 3
      data/conf/rspamd/dynmaps/forwardinghosts.php

+ 4 - 3
data/conf/postfix/whitelist_forwardinghosts.sh

@@ -1,11 +1,12 @@
 #!/bin/bash
 
-while true; do
-	read QUERY
+while read QUERY; do
 	QUERY=($QUERY)
 	if [ "${QUERY[0]}" != "get" ]; then
 		echo "500 dunno"
 		continue
 	fi
-	echo $(curl -s http://172.22.1.251:8081/forwardinghosts.php?host=${QUERY[1]})
+	result=$(curl -s http://172.22.1.251:8081/forwardinghosts.php?host=${QUERY[1]})
+	logger -t whitelist_forwardinghosts -p mail.info "Look up ${QUERY[1]} on whitelist, result $result"
+	echo $result
 done

+ 6 - 3
data/conf/rspamd/dynmaps/forwardinghosts.php

@@ -7,13 +7,16 @@ ini_set('error_reporting', 0);
 function in_net($addr, $net)
 {
 	$net = explode('/', $net);
-	$mask = $net[1];
+	if (count($net) > 1)
+		$mask = $net[1];
 	$net = inet_pton($net[0]);
 	$addr = inet_pton($addr);
 
 	$length = strlen($net); // 4 for IPv4, 16 for IPv6
 	if (strlen($net) != strlen($addr))
 		return FALSE;
+	if (!isset($mask))
+		$mask = $length * 8;
 
 	$addr_bin = '';
 	$net_bin = '';
@@ -34,7 +37,7 @@ $opt = [
 ];
 try {
   $pdo = new PDO($dsn, $database_user, $database_pass, $opt);
-  $stmt = $pdo->query("SELECT * FROM `forwarding_hosts`");
+  $stmt = $pdo->query("SELECT host FROM `forwarding_hosts`");
   $networks = $stmt->fetchAll(PDO::FETCH_COLUMN);
   foreach ($networks as $network)
   {
@@ -47,7 +50,7 @@ try {
   echo '200 dunno';
 }
 catch (PDOException $e) {
-  echo 'settings { }';
+  echo '200 dunno';
   exit;
 }
 ?>