From 65f3100f7ee79bfc8bda9e7ca2ce6015e8dc02dc Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 20 Oct 2025 16:40:15 +0200 Subject: [SERVER] Check if iSCSI server is enabled, check opcode --- src/server/globals.c | 6 +++--- src/server/globals.h | 2 +- src/server/net.c | 20 ++++++++++++-------- 3 files changed, 16 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/server/globals.c b/src/server/globals.c index 34941bf..37ee3d4 100644 --- a/src/server/globals.c +++ b/src/server/globals.c @@ -32,7 +32,7 @@ atomic_bool _vmdkLegacyMode = false; atomic_bool _proxyPrivateOnly = false; atomic_bool _pretendClient = false; atomic_int _autoFreeDiskSpaceDelay = 3600 * 10; -atomic_bool _iSCSIServer = true; +atomic_bool _iScsiServer = true; // [limits] atomic_int _maxClients = SERVER_MAX_CLIENTS; atomic_int _maxImages = SERVER_MAX_IMAGES; @@ -94,7 +94,7 @@ static int ini_handler(void *custom UNUSED, const char* section, const char* key SAVE_TO_VAR_UINT( limits, minRequestSize ); SAVE_TO_VAR_BOOL( dnbd3, pretendClient ); SAVE_TO_VAR_INT( dnbd3, autoFreeDiskSpaceDelay ); - SAVE_TO_VAR_BOOL( dnbd3, iSCSIServer ); + SAVE_TO_VAR_BOOL( dnbd3, iScsiServer ); if ( strcmp( section, "dnbd3" ) == 0 && strcmp( key, "backgroundReplication" ) == 0 ) { if ( strcmp( value, "hashblock" ) == 0 ) { _backgroundReplication = BGR_HASHBLOCK; @@ -366,7 +366,7 @@ size_t globals_dumpConfig(char *buffer, size_t size) PBOOL(proxyPrivateOnly); PBOOL(pretendClient); PINT(autoFreeDiskSpaceDelay); - PBOOL(iSCSIServer); + PBOOL(iScsiServer); P_ARG("[limits]\n"); PINT(maxClients); PINT(maxImages); diff --git a/src/server/globals.h b/src/server/globals.h index b51a81a..900b86d 100644 --- a/src/server/globals.h +++ b/src/server/globals.h @@ -337,7 +337,7 @@ extern atomic_int _autoFreeDiskSpaceDelay; * Specifies if the iSCSI server should be initialized, enabled * and used upon start of DNBD3 server. */ -extern atomic_bool _iSCSIServer; +extern atomic_bool _iScsiServer; /** * When handling a client request, this sets the maximum amount diff --git a/src/server/net.c b/src/server/net.c index e94e549..4c04462 100644 --- a/src/server/net.c +++ b/src/server/net.c @@ -184,17 +184,21 @@ void* net_handleNewConnection(void *clientPtr) if ( ((char*)&request)[0] == 'G' || ((char*)&request)[0] == 'P' ) { // Close enough... rpc_sendStatsJson( client->sock, &client->host, &request, ret ); - } else if ( true /* check opcode ... */ ) { - initClientStruct( client ); - if ( !addToList( client ) ) { - freeClientStruct( client ); - logadd( LOG_WARNING, "Could not add new iSCSI client to list when connecting" ); + } else if ( ((char*)&request)[0] == 0x43 ) { // Login opcode 0x03 + immediate bit (0x40) set + if ( !_iScsiServer ) { + logadd( LOG_INFO, "Received iSCSI login request from %s, but iSCSI server is not enabled", client->hostName ); } else { - iscsi_connection_handle( client, &request, ret ); - goto exit_client_cleanup; + initClientStruct( client ); + if ( !addToList( client ) ) { + freeClientStruct( client ); + logadd( LOG_WARNING, "Could not add new iSCSI client to list when connecting" ); + } else { + iscsi_connection_handle( client, &request, ret ); + goto exit_client_cleanup; + } } } else { - logadd( LOG_DEBUG1, "Magic in client handshake incorrect" ); + logadd( LOG_DEBUG1, "Magic in client handshake unknown" ); } goto fail_preadd; } -- cgit v1.2.3-55-g7522