2011-02-06 14:34 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* contrib/hbnetio/utils/hbnetio/netiosrv.prg
+ Reworked and reenabled host name based filtering.
NOTE: Host name lookup is not implemented for win platforms
in hbsocket.
This commit is contained in:
@@ -16,6 +16,12 @@
|
||||
The license applies to all entries newer than 2009-04-28.
|
||||
*/
|
||||
|
||||
2011-02-06 14:34 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* contrib/hbnetio/utils/hbnetio/netiosrv.prg
|
||||
+ Reworked and reenabled host name based filtering.
|
||||
NOTE: Host name lookup is not implemented for win platforms
|
||||
in hbsocket.
|
||||
|
||||
2011-02-06 13:57 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
|
||||
* contrib/hbnetio/utils/hbnetio/netiosrv.prg
|
||||
* contrib/hbnetio/utils/hbnetio/netiocon.prg
|
||||
|
||||
@@ -397,13 +397,15 @@ STATIC PROCEDURE netiosrv_notifyclients( netiomgm, cMsg )
|
||||
STATIC FUNCTION netiosrv_callback( netiomgm, netiosrv, pConnectionSocket, lManagement )
|
||||
LOCAL aAddressPeer
|
||||
LOCAL cAddressPeer
|
||||
LOCAL nAddressFamily
|
||||
LOCAL aNamePeer
|
||||
LOCAL cNamePeer
|
||||
LOCAL lBlocked
|
||||
|
||||
IF netiosrv[ _NETIOSRV_lAcceptConn ]
|
||||
|
||||
netio_srvStatus( pConnectionSocket, NETIO_SRVINFO_PEERADDRESS, @aAddressPeer )
|
||||
cAddressPeer := AddrToIPPort( aAddressPeer )
|
||||
cAddressPeer := AddrToIPPort( aAddressPeer, @nAddressFamily )
|
||||
|
||||
lBlocked := .F.
|
||||
|
||||
@@ -412,16 +414,19 @@ STATIC FUNCTION netiosrv_callback( netiomgm, netiosrv, pConnectionSocket, lManag
|
||||
hb_mutexLock( netiosrv[ _NETIOSRV_mtxFilters ] )
|
||||
IF !( cAddressPeer $ netiosrv[ _NETIOSRV_hAllow ] )
|
||||
IF hb_HScan( netiosrv[ _NETIOSRV_hAllow ], {| tmp | hb_WildMatch( tmp, cAddressPeer ) } ) == 0
|
||||
cNamePeer := NIL /* TOFIX: hb_socketResolveAddr( cAddressPeer ) */
|
||||
IF cNamePeer == NIL
|
||||
aNamePeer := hb_socketGetHosts( cAddressPeer, nAddressFamily )
|
||||
IF Empty( aNamePeer )
|
||||
lBlocked := .T.
|
||||
ELSE
|
||||
IF !( cNamePeer $ netiosrv[ _NETIOSRV_hAllow ] )
|
||||
IF hb_HScan( netiosrv[ _NETIOSRV_hAllow ], {| tmp | hb_WildMatch( tmp, cNamePeer ) } ) == 0
|
||||
/* Not on allow list */
|
||||
lBlocked := .T.
|
||||
FOR EACH cNamePeer IN aNamePeer
|
||||
IF !( cNamePeer $ netiosrv[ _NETIOSRV_hAllow ] )
|
||||
IF hb_HScan( netiosrv[ _NETIOSRV_hAllow ], {| tmp | hb_WildMatch( tmp, cNamePeer ) } ) == 0
|
||||
/* Not on allow list */
|
||||
lBlocked := .T.
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
NEXT
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
@@ -443,17 +448,21 @@ STATIC FUNCTION netiosrv_callback( netiomgm, netiosrv, pConnectionSocket, lManag
|
||||
IF hb_HScan( netiosrv[ _NETIOSRV_hBlock ], {| tmp | hb_WildMatch( tmp, cAddressPeer ) } ) > 0
|
||||
lBlocked := .T.
|
||||
ELSE
|
||||
IF cNamePeer == NIL
|
||||
cNamePeer := NIL /* TOFIX: hb_socketResolveAddr( cAddressPeer ) */
|
||||
IF aNamePeer == NIL
|
||||
aNamePeer := hb_socketGetHosts( cAddressPeer, nAddressFamily )
|
||||
ENDIF
|
||||
IF cNamePeer != NIL
|
||||
IF cNamePeer $ netiosrv[ _NETIOSRV_hBlock ]
|
||||
lBlocked := .T.
|
||||
ELSE
|
||||
IF hb_HScan( netiosrv[ _NETIOSRV_hBlock ], {| tmp | hb_WildMatch( tmp, cNamePeer ) } ) > 0
|
||||
IF ! Empty( aNamePeer )
|
||||
FOR EACH cNamePeer IN aNamePeer
|
||||
IF cNamePeer $ netiosrv[ _NETIOSRV_hBlock ]
|
||||
lBlocked := .T.
|
||||
EXIT
|
||||
ELSE
|
||||
IF hb_HScan( netiosrv[ _NETIOSRV_hBlock ], {| tmp | hb_WildMatch( tmp, cNamePeer ) } ) > 0
|
||||
lBlocked := .T.
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
NEXT
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
@@ -786,15 +795,17 @@ STATIC FUNCTION ConnStatusStr( nStatus )
|
||||
|
||||
RETURN "UNKNOWN:" + hb_ntos( nStatus )
|
||||
|
||||
STATIC FUNCTION AddrToIPPort( aAddr )
|
||||
STATIC FUNCTION AddrToIPPort( aAddr, /* @ */ nFamily )
|
||||
LOCAL cIP
|
||||
|
||||
IF hb_isArray( aAddr ) .AND. ;
|
||||
( aAddr[ HB_SOCKET_ADINFO_FAMILY ] == HB_SOCKET_AF_INET .OR. ;
|
||||
aAddr[ HB_SOCKET_ADINFO_FAMILY ] == HB_SOCKET_AF_INET6 )
|
||||
cIP := aAddr[ HB_SOCKET_ADINFO_ADDRESS ] + ":" + hb_ntos( aAddr[ HB_SOCKET_ADINFO_PORT ] )
|
||||
nFamily := aAddr[ HB_SOCKET_ADINFO_FAMILY ]
|
||||
ELSE
|
||||
cIP := "(?)"
|
||||
nFamily := -1
|
||||
ENDIF
|
||||
|
||||
RETURN cIP
|
||||
|
||||
Reference in New Issue
Block a user