Page Menu
Home
WMGMC Issues
搜索
Configure Global Search
登录
Files
F15966
functions.fwdhost.inc.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
订阅
标记用于日后
授予令牌
Size
5 KB
Referenced Files
None
订阅者
None
functions.fwdhost.inc.php
View Options
<?php
function
fwdhost
(
$_action
,
$_data
=
null
)
{
require_once
$_SERVER
[
'DOCUMENT_ROOT'
]
.
'/inc/spf.inc.php'
;
global
$redis
;
global
$lang
;
$_data_log
=
$_data
;
switch
(
$_action
)
{
case
'add'
:
global
$lang
;
if
(
$_SESSION
[
'mailcow_cc_role'
]
!=
"admin"
)
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'danger'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_data_log
),
'msg'
=>
'access_denied'
);
return
false
;
}
$source
=
$_data
[
'hostname'
];
$host
=
trim
(
$_data
[
'hostname'
]);
$filter_spam
=
(
isset
(
$_data
[
'filter_spam'
])
&&
$_data
[
'filter_spam'
]
==
1
)
?
1
:
0
;
if
(
preg_match
(
'/^[0-9a-fA-F:
\/
]+$/'
,
$host
))
{
// IPv6 address
$hosts
=
array
(
$host
);
}
elseif
(
preg_match
(
'/^[0-9
\.\/
]+$/'
,
$host
))
{
// IPv4 address
$hosts
=
array
(
$host
);
}
else
{
$hosts
=
get_outgoing_hosts_best_guess
(
$host
);
}
if
(
empty
(
$hosts
))
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'danger'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_data_log
),
'msg'
=>
array
(
'invalid_host'
,
htmlspecialchars
(
$host
))
);
return
false
;
}
foreach
(
$hosts
as
$host
)
{
try
{
$redis
->
hSet
(
'WHITELISTED_FWD_HOST'
,
$host
,
$source
);
if
(
$filter_spam
==
0
)
{
$redis
->
hSet
(
'KEEP_SPAM'
,
$host
,
1
);
}
elseif
(
$redis
->
hGet
(
'KEEP_SPAM'
,
$host
))
{
$redis
->
hDel
(
'KEEP_SPAM'
,
$host
);
}
}
catch
(
RedisException
$e
)
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'danger'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_data_log
),
'msg'
=>
array
(
'redis_error'
,
$e
)
);
return
false
;
}
}
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'success'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_data_log
),
'msg'
=>
array
(
'forwarding_host_added'
,
htmlspecialchars
(
implode
(
', '
,
(
array
)
$hosts
)))
);
break
;
case
'edit'
:
global
$lang
;
if
(
$_SESSION
[
'mailcow_cc_role'
]
!=
"admin"
)
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'danger'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_data_log
),
'msg'
=>
'access_denied'
);
return
false
;
}
$fwdhosts
=
(
array
)
$_data
[
'fwdhost'
];
foreach
(
$fwdhosts
as
$fwdhost
)
{
$is_now
=
fwdhost
(
'details'
,
$fwdhost
);
if
(!
empty
(
$is_now
))
{
$keep_spam
=
(
isset
(
$_data
[
'keep_spam'
]))
?
$_data
[
'keep_spam'
]
:
$is_now
[
'keep_spam'
];
}
else
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'danger'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_data_log
),
'msg'
=>
'access_denied'
);
continue
;
}
try
{
if
(
$keep_spam
==
1
)
{
$redis
->
hSet
(
'KEEP_SPAM'
,
$fwdhost
,
1
);
}
else
{
$redis
->
hDel
(
'KEEP_SPAM'
,
$fwdhost
);
}
}
catch
(
RedisException
$e
)
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'danger'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_data_log
),
'msg'
=>
array
(
'redis_error'
,
$e
)
);
continue
;
}
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'success'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_data_log
),
'msg'
=>
array
(
'object_modified'
,
htmlspecialchars
(
$fwdhost
))
);
}
break
;
case
'delete'
:
$hosts
=
(
array
)
$_data
[
'forwardinghost'
];
foreach
(
$hosts
as
$host
)
{
try
{
$redis
->
hDel
(
'WHITELISTED_FWD_HOST'
,
$host
);
$redis
->
hDel
(
'KEEP_SPAM'
,
$host
);
}
catch
(
RedisException
$e
)
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'danger'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_data_log
),
'msg'
=>
array
(
'redis_error'
,
$e
)
);
continue
;
}
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'success'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_data_log
),
'msg'
=>
array
(
'forwarding_host_removed'
,
htmlspecialchars
(
$host
))
);
}
break
;
case
'get'
:
if
(
$_SESSION
[
'mailcow_cc_role'
]
!=
"admin"
)
{
return
false
;
}
$fwdhostsdata
=
array
();
try
{
$fwd_hosts
=
$redis
->
hGetAll
(
'WHITELISTED_FWD_HOST'
);
if
(!
empty
(
$fwd_hosts
))
{
foreach
(
$fwd_hosts
as
$fwd_host
=>
$source
)
{
$keep_spam
=
(
$redis
->
hGet
(
'KEEP_SPAM'
,
$fwd_host
))
?
"yes"
:
"no"
;
$fwdhostsdata
[]
=
array
(
'host'
=>
$fwd_host
,
'source'
=>
$source
,
'keep_spam'
=>
$keep_spam
);
}
}
}
catch
(
RedisException
$e
)
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'danger'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_data_log
),
'msg'
=>
array
(
'redis_error'
,
$e
)
);
return
false
;
}
return
$fwdhostsdata
;
break
;
case
'details'
:
$fwdhostdetails
=
array
();
if
(!
isset
(
$_data
)
||
empty
(
$_data
))
{
return
false
;
}
try
{
if
(
$source
=
$redis
->
hGet
(
'WHITELISTED_FWD_HOST'
,
$_data
))
{
$fwdhostdetails
[
'host'
]
=
$_data
;
$fwdhostdetails
[
'source'
]
=
$source
;
$fwdhostdetails
[
'keep_spam'
]
=
(
$redis
->
hGet
(
'KEEP_SPAM'
,
$_data
))
?
"yes"
:
"no"
;
}
}
catch
(
RedisException
$e
)
{
$_SESSION
[
'return'
][]
=
array
(
'type'
=>
'danger'
,
'log'
=>
array
(
__FUNCTION__
,
$_action
,
$_data_log
),
'msg'
=>
array
(
'redis_error'
,
$e
)
);
return
false
;
}
return
$fwdhostdetails
;
break
;
}
}
File Metadata
详情
附加的
Mime Type
text/x-php
Expires
9月 9 Tue, 6:05 AM (11 h, 13 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5442
默认替代文本
functions.fwdhost.inc.php (5 KB)
Attached To
Mode
rMAILCOW mailcow-tracking
附加的
Detach File
Event Timeline
Log In to Comment