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:
Viktor Szakats
2011-02-06 13:34:25 +00:00
parent c9fece796d
commit 4c74c24c52
2 changed files with 34 additions and 17 deletions

View File

@@ -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

View File

@@ -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