From 4c74c24c520de79d9d140df682533f1655d3d289 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Sun, 6 Feb 2011 13:34:25 +0000 Subject: [PATCH] 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. --- harbour/ChangeLog | 6 +++ .../hbnetio/utils/hbnetio/netiosrv.prg | 45 ++++++++++++------- 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index b7bf7d696e..5dccf3f2cc 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -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 diff --git a/harbour/contrib/hbnetio/utils/hbnetio/netiosrv.prg b/harbour/contrib/hbnetio/utils/hbnetio/netiosrv.prg index dea3bd8d79..89f9197e3a 100644 --- a/harbour/contrib/hbnetio/utils/hbnetio/netiosrv.prg +++ b/harbour/contrib/hbnetio/utils/hbnetio/netiosrv.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