func match_cidr_list(string cl_addr, string cidr_list) returns number do set str1 substring(cidr_list, 0, index(cidr_list, "\n")-1) if index(cidr_list, "\n") = 0 return 0 fi if match_cidr(cl_addr, str1) return 1 fi set str2 substring(cidr_list, index(cidr_list, "\n")+1, -1) return match_cidr_list(cl_addr, str2) done func massallocated_hit(string cl_addr, string ma_regexps) returns number do set str1 substring(ma_regexps, 0, index(ma_regexps, "\n")-1) if hostname (cl_addr) matches str1 return 1 fi if not index(ma_regexps, "\n") = 0 set str2 substring(ma_regexps, index(ma_regexps, "\n")+1, -1) set ms_hit_tmp massallocated_hit(cl_addr, str2) if ms_hit_tmp = 0 return 0 else return ms_hit_tmp + 1 fi fi return 0 done func safe_send_mail (string msg, string eml) do catch failure do echo "%queue_id: WARNING: message from interceptor was not been sent to %eml." return done send_mail(msg, eml) done func access_db_check (string dbfile, string key) do string accessdb_value dbget(dbfile, key, "NULL") /* cancel processing with accept: MTA will be reject it... */ if accessdb_value matches '(REJECT|ERROR)(.?)(.*)' accept fi done /* Convert a SpamAssassin `code' back to fixed point form using the given number of digits (`prec') */ func to_double_str(string code, number prec) returns string do if length(code) = prec set code "0" . code fi if code matches "^(\-)(...)$" set code "\1" "0" "\2" fi if length(code) > prec return substring(code, 0, length(code)-prec-1) . '.' . substring(code, length(code)-prec, -1) else return $1 fi done func whitelist_chk_global(string ipaddr, string mailfrom) do if ipaddr matches '([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)' if dbmap("/etc/mailfromd/whitelist.db", "global:" . "\1.\2.\3.\4", 1) or dbmap("/etc/mailfromd/whitelist.db", "global:" . "\1.\2.\3", 1) or dbmap("/etc/mailfromd/whitelist.db", "global:" . "\1.\2", 1) or dbmap("/etc/mailfromd/whitelist.db", "global:" . "\1", 1) or dbmap("/etc/mailfromd/whitelist.db", tolower("global:" . "\1.\2.\3.\4" . "-" . mailfrom), 1) or dbmap("/etc/mailfromd/whitelist.db", tolower("global:" . "\1.\2.\3" . "-" . mailfrom), 1) or dbmap("/etc/mailfromd/whitelist.db", tolower("global:" . "\1.\2" . "-" . mailfrom), 1) or dbmap("/etc/mailfromd/whitelist.db", tolower("global:" . "\1" . "-" . mailfrom), 1) or dbmap("/etc/mailfromd/whitelist.db", tolower("global:" . mailfrom), 1) accept fi fi done