From 2b1f7f3bc6d97bf902e6459a6adf61adda595d63 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Wed, 13 Jan 2010 14:45:29 +0000 Subject: [PATCH] 2010-01-13 15:45 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) * contrib/hbnetio/utils/netiosrv.prg + Internal change moving all server object related variables to one array. + Added 'config' command. * Changed exit command to quit to be in sync with other tools and hbrun. + Attempt to free password variable. + Showing 'unsafe' warning if RPC is enabled without filter module. --- harbour/ChangeLog | 9 +++ harbour/contrib/hbnetio/utils/netiosrv.prg | 92 ++++++++++++++-------- 2 files changed, 67 insertions(+), 34 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 536d551c42..6a53020506 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,15 @@ past entries belonging to author(s): Viktor Szakats. */ +2010-01-13 15:45 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) + * contrib/hbnetio/utils/netiosrv.prg + + Internal change moving all server object related variables to + one array. + + Added 'config' command. + * Changed exit command to quit to be in sync with other tools and hbrun. + + Attempt to free password variable. + + Showing 'unsafe' warning if RPC is enabled without filter module. + 2010-01-13 15:10 UTC+0100 Viktor Szakats (harbour.01 syenar.hu) * include/hbsetup.ch * Disabled HB_LEGACY_LEVEL2 by default. diff --git a/harbour/contrib/hbnetio/utils/netiosrv.prg b/harbour/contrib/hbnetio/utils/netiosrv.prg index f25ce2871f..c644dc6cb0 100644 --- a/harbour/contrib/hbnetio/utils/netiosrv.prg +++ b/harbour/contrib/hbnetio/utils/netiosrv.prg @@ -35,42 +35,51 @@ REQUEST HB_MT REQUEST __HB_EXTERN__ #endif +#define _NETIOSRV_nPort 1 +#define _NETIOSRV_cIFAddr 2 +#define _NETIOSRV_cRootDir 3 +#define _NETIOSRV_lRPC 4 +#define _NETIOSRV_cRPCFFileName 5 +#define _NETIOSRV_cRPCFHRB 6 +#define _NETIOSRV_lEncryption 7 +#define _NETIOSRV_pListenSocket 8 +#define _NETIOSRV_MAX_ 8 + PROCEDURE Main( ... ) - LOCAL pListenSocket + LOCAL netiosrv[ _NETIOSRV_MAX_ ] + LOCAL cParam - - LOCAL port := 2941 - LOCAL ifaddr := "0.0.0.0" - LOCAL rootdir := hb_dirBase() - LOCAL rpc := .F. - LOCAL rpc_filename := NIL - LOCAL rpc_hrb := NIL - LOCAL passwd := NIL - LOCAL cCommand + LOCAL cPassword HB_Logo() + netiosrv[ _NETIOSRV_nPort ] := 2941 + netiosrv[ _NETIOSRV_cIFAddr ] := "0.0.0.0" + netiosrv[ _NETIOSRV_cRootDir ] := hb_dirBase() + netiosrv[ _NETIOSRV_lRPC ] := .F. + netiosrv[ _NETIOSRV_lEncryption ] := .F. + FOR EACH cParam IN hb_AParams() DO CASE CASE Lower( Left( cParam, 6 ) ) == "-port=" - port := Val( SubStr( cParam, 7 ) ) + netiosrv[ _NETIOSRV_nPort ] := Val( SubStr( cParam, 7 ) ) CASE Lower( Left( cParam, 7 ) ) == "-iface=" - ifaddr := SubStr( cParam, 8 ) + netiosrv[ _NETIOSRV_cIFAddr ] := SubStr( cParam, 8 ) CASE Lower( Left( cParam, 9 ) ) == "-rootdir=" - rootdir := SubStr( cParam, 10 ) + netiosrv[ _NETIOSRV_cRootDir ] := SubStr( cParam, 10 ) CASE Lower( Left( cParam, 6 ) ) == "-pass=" - passwd := SubStr( cParam, 7 ) + cPassword := SubStr( cParam, 7 ) CASE Lower( Left( cParam, 5 ) ) == "-rpc=" - rpc_filename := SubStr( cParam, 6 ) - rpc_hrb := hb_hrbLoad( rpc_filename ) - rpc := ! Empty( rpc_hrb ) .AND. ! Empty( hb_hrbGetFunSym( rpc_hrb, _RPC_FILTER ) ) - IF ! rpc - rpc_filename := NIL - rpc_hrb := NIL + netiosrv[ _NETIOSRV_cRPCFFileName ] := SubStr( cParam, 6 ) + netiosrv[ _NETIOSRV_cRPCFHRB ] := hb_hrbLoad( netiosrv[ _NETIOSRV_cRPCFFileName ] ) + netiosrv[ _NETIOSRV_lRPC ] := ! Empty( netiosrv[ _NETIOSRV_cRPCFHRB ] ) .AND. ! Empty( hb_hrbGetFunSym( netiosrv[ _NETIOSRV_cRPCFHRB ], _RPC_FILTER ) ) + IF ! netiosrv[ _NETIOSRV_lRPC ] + netiosrv[ _NETIOSRV_cRPCFFileName ] := NIL + netiosrv[ _NETIOSRV_cRPCFHRB ] := NIL ENDIF CASE Lower( cParam ) == "-rpc" - rpc := .T. + netiosrv[ _NETIOSRV_lRPC ] := .T. CASE Lower( cParam ) == "--version" RETURN CASE Lower( cParam ) == "-help" .OR. ; @@ -84,17 +93,19 @@ PROCEDURE Main( ... ) SetCancel( .F. ) - pListenSocket := netio_mtserver( port, ifaddr, rootdir, iif( Empty( rpc_hrb ), rpc, hb_hrbGetFunSym( rpc_hrb, _RPC_FILTER ) ), passwd ) - IF Empty( pListenSocket ) + netiosrv[ _NETIOSRV_pListenSocket ] := netio_mtserver( netiosrv[ _NETIOSRV_nPort ],; + netiosrv[ _NETIOSRV_cIFAddr ],; + netiosrv[ _NETIOSRV_cRootDir ],; + iif( Empty( netiosrv[ _NETIOSRV_cRPCFHRB ] ), netiosrv[ _NETIOSRV_lRPC ], hb_hrbGetFunSym( netiosrv[ _NETIOSRV_cRPCFHRB ], _RPC_FILTER ) ),; + cPassword ) + + netiosrv[ _NETIOSRV_lEncryption ] := ! Empty( cPassword ) + cPassword := NIL /* Attempt to clear plain text pw from memory */ + + IF Empty( netiosrv[ _NETIOSRV_pListenSocket ] ) OutStd( "Cannot start server." + hb_osNewLine() ) ELSE - OutStd( "Listening on: " + ifaddr + ":" + hb_ntos( port ) + hb_osNewLine() ) - OutStd( "Root filesystem: " + rootdir + hb_osNewLine() ) - OutStd( "RPC support: " + iif( rpc, "enabled", "disabled" ) + hb_osNewLine() ) - OutStd( "Encryption: " + iif( passwd != NIL, "enabled", "disabled" ) + hb_osNewLine() ) - IF ! Empty( rpc_hrb ) - OutStd( "RPC filter module: " + rpc_filename + hb_osNewLine() ) - ENDIF + ShowConfig( netiosrv ) OutStd( hb_osNewLine() ) OutStd( "hbnetiosrv command prompt:", hb_osNewLine() ) @@ -122,17 +133,20 @@ PROCEDURE Main( ... ) - cut/paste support */ DO CASE - CASE Lower( cCommand ) == "exit" + CASE Lower( cCommand ) == "quit" EXIT + CASE Lower( cCommand ) == "config" + ShowConfig( netiosrv ) CASE Lower( cCommand ) == "help" - OutStd( "EXIT - Stop server and exit", hb_osNewLine() ) + OutStd( "config - Show server config", hb_osNewLine() ) + OutStd( "quit - Stop server and exit", hb_osNewLine() ) CASE ! Empty( cCommand ) OutStd( "Error: Unknown command.", hb_osNewLine() ) ENDCASE ENDDO - netio_serverstop( pListenSocket ) - pListenSocket := NIL + netio_serverstop( netiosrv[ _NETIOSRV_pListenSocket ] ) + netiosrv[ _NETIOSRV_pListenSocket ] := NIL OutStd( hb_osNewLine() ) OutStd( "Server stopped.", hb_osNewLine() ) @@ -140,6 +154,16 @@ PROCEDURE Main( ... ) RETURN +STATIC PROCEDURE ShowConfig( netiosrv ) + + OutStd( "Listening on: " + netiosrv[ _NETIOSRV_cIFAddr ] + ":" + hb_ntos( netiosrv[ _NETIOSRV_nPort ] ) + hb_osNewLine() ) + OutStd( "Root filesystem: " + netiosrv[ _NETIOSRV_cRootDir ] + hb_osNewLine() ) + OutStd( "RPC support: " + iif( netiosrv[ _NETIOSRV_lRPC ], "enabled", "disabled" ) + hb_osNewLine() ) + OutStd( "Encryption: " + iif( netiosrv[ _NETIOSRV_lEncryption ], "enabled", "disabled" ) + hb_osNewLine() ) + OutStd( "RPC filter module: " + iif( Empty( netiosrv[ _NETIOSRV_cRPCFHRB ] ), iif( netiosrv[ _NETIOSRV_lRPC ], "not set (WARNING: unsafe open server)", "not set" ), netiosrv[ _NETIOSRV_cRPCFFileName ] ) + hb_osNewLine() ) + + RETURN + STATIC PROCEDURE HB_Logo() OutStd( "Harbour NETIO Server " + HBRawVersion() + hb_osNewLine() +;