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.
This commit is contained in:
Viktor Szakats
2010-01-13 14:45:29 +00:00
parent 6e4895e9de
commit 2b1f7f3bc6
2 changed files with 67 additions and 34 deletions

View File

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

View File

@@ -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() +;