@@ -324,13 +324,14 @@ def __init__(self, config: GatewayConfig, gateway_state: GatewayStateHandler, rp
324
324
self .host_name = socket .gethostname ()
325
325
self .verify_nqns = self .config .getboolean_with_default ("gateway" , "verify_nqns" , True )
326
326
self .gateway_group = self .config .get_with_default ("gateway" , "group" , "" )
327
- self .max_hosts_per_namespace = self .config .getint_with_default ("gateway" , "max_hosts_per_namespace" , 1 )
327
+ self .max_hosts_per_namespace = self .config .getint_with_default ("gateway" , "max_hosts_per_namespace" , 8 )
328
328
self .max_namespaces_with_netmask = self .config .getint_with_default ("gateway" , "max_namespaces_with_netmask" , 1000 )
329
329
self .max_subsystems = self .config .getint_with_default ("gateway" , "max_subsystems" , GatewayService .MAX_SUBSYSTEMS_DEFAULT )
330
330
self .max_namespaces = self .config .getint_with_default ("gateway" , "max_namespaces" , GatewayService .MAX_NAMESPACES_DEFAULT )
331
331
self .max_namespaces_per_subsystem = self .config .getint_with_default ("gateway" , "max_namespaces_per_subsystem" , GatewayService .MAX_NAMESPACES_PER_SUBSYSTEM_DEFAULT )
332
332
self .max_hosts_per_subsystem = self .config .getint_with_default ("gateway" , "max_hosts_per_subsystem" , GatewayService .MAX_HOSTS_PER_SUBSYS_DEFAULT )
333
333
self .gateway_pool = self .config .get_with_default ("ceph" , "pool" , "" )
334
+ self .enable_key_encryption = self .config .getboolean_with_default ("gateway" , "enable_key_encryption" , True )
334
335
self .ana_map = defaultdict (dict )
335
336
self .cluster_nonce = {}
336
337
self .bdev_cluster = {}
@@ -672,6 +673,7 @@ def create_bdev(self, anagrp: int, name, uuid, rbd_pool_name, rbd_image_name, bl
672
673
self .logger .exception (errmsg )
673
674
return BdevStatus (status = errcode , error_message = f"Failure creating bdev { name } : { errmsg } " )
674
675
676
+ cluster_name = None
675
677
try :
676
678
cluster_name = self ._get_cluster (anagrp )
677
679
bdev_name = rpc_bdev .bdev_rbd_create (
@@ -689,7 +691,8 @@ def create_bdev(self, anagrp: int, name, uuid, rbd_pool_name, rbd_image_name, bl
689
691
690
692
self .logger .debug (f"bdev_rbd_create: { bdev_name } , cluster_name { cluster_name } " )
691
693
except Exception as ex :
692
- self ._put_cluster (cluster_name )
694
+ if cluster_name != None :
695
+ self ._put_cluster (cluster_name )
693
696
errmsg = f"bdev_rbd_create { name } failed"
694
697
self .logger .exception (errmsg )
695
698
errmsg = f"{ errmsg } with:\n { ex } "
@@ -978,6 +981,10 @@ def create_subsystem_safe(self, request, context):
978
981
if context :
979
982
# Update gateway state
980
983
try :
984
+ request .encrypted_dhchap_key = b""
985
+ if self .enable_key_encryption and request .dhchap_key :
986
+ request .encrypted_dhchap_key = self .gateway_state .crypto .encrypt_text (request .dhchap_key )
987
+ request .dhchap_key = ""
981
988
json_req = json_format .MessageToJson (
982
989
request , preserving_proto_field_name = True , including_default_value_fields = True )
983
990
self .gateway_state .add_subsystem (request .subsystem_nqn , json_req )
@@ -2547,6 +2554,13 @@ def add_host_safe(self, request, context):
2547
2554
if context :
2548
2555
# Update gateway state
2549
2556
try :
2557
+ if self .enable_key_encryption :
2558
+ if request .dhchap_key :
2559
+ request .encrypted_dhchap_key = self .gateway_state .crypto .encrypt_text (request .dhchap_key )
2560
+ request .dhchap_key = ""
2561
+ if request .psk :
2562
+ request .encrypted_psk = self .gateway_state .crypto .encrypt_text (request .psk )
2563
+ request .psk = ""
2550
2564
json_req = json_format .MessageToJson (
2551
2565
request , preserving_proto_field_name = True , including_default_value_fields = True )
2552
2566
self .gateway_state .add_host (request .subsystem_nqn , request .host_nqn , json_req )
@@ -2793,12 +2807,17 @@ def change_host_key_safe(self, request, context):
2793
2807
if context :
2794
2808
# Update gateway state
2795
2809
try :
2810
+ encrypted_dhchap_key = b""
2811
+ if self .enable_key_encryption and request .dhchap_key :
2812
+ encrypted_dhchap_key = self .gateway_state .crypto .encrypt_text (request .dhchap_key )
2813
+ request .dhchap_key = ""
2796
2814
add_req = pb2 .add_host_req (subsystem_nqn = request .subsystem_nqn ,
2797
2815
host_nqn = request .host_nqn ,
2798
2816
psk = host_psk ,
2799
- dhchap_key = request .dhchap_key )
2817
+ dhchap_key = request .dhchap_key ,
2818
+ encrypted_dhchap_key = encrypted_dhchap_key )
2800
2819
json_req = json_format .MessageToJson (
2801
- add_req , preserving_proto_field_name = True , including_default_value_fields = True )
2820
+ add_req , preserving_proto_field_name = True , including_default_value_fields = True )
2802
2821
self .gateway_state .add_host (request .subsystem_nqn , request .host_nqn , json_req )
2803
2822
except Exception as ex :
2804
2823
errmsg = f"Error persisting host change key for host { request .host_nqn } in { request .subsystem_nqn } "
@@ -3501,12 +3520,18 @@ def change_subsystem_key_safe(self, request, context):
3501
3520
3502
3521
assert subsys_entry , f"Can't find entry for subsystem { request .subsystem_nqn } "
3503
3522
try :
3523
+ dhchap_key = request .dhchap_key
3524
+ encrypted_dhchap_key = b""
3525
+ if self .enable_key_encryption and request .dhchap_key :
3526
+ encrypted_dhchap_key = self .gateway_state .crypto .encrypt_text (request .dhchap_key )
3527
+ dhchap_key = ""
3504
3528
create_req = pb2 .create_subsystem_req (subsystem_nqn = request .subsystem_nqn ,
3505
3529
serial_number = subsys_entry ["serial_number" ],
3506
3530
max_namespaces = subsys_entry ["max_namespaces" ],
3507
3531
enable_ha = subsys_entry ["enable_ha" ],
3508
3532
no_group_append = subsys_entry ["no_group_append" ],
3509
- dhchap_key = request .dhchap_key )
3533
+ dhchap_key = dhchap_key ,
3534
+ encrypted_dhchap_key = encrypted_dhchap_key )
3510
3535
json_req = json_format .MessageToJson (
3511
3536
create_req , preserving_proto_field_name = True , including_default_value_fields = True )
3512
3537
self .gateway_state .add_subsystem (request .subsystem_nqn , json_req )
@@ -3532,7 +3557,6 @@ def change_subsystem_key_safe(self, request, context):
3532
3557
except Excpetion :
3533
3558
pass
3534
3559
3535
-
3536
3560
return pb2 .req_status (status = 0 , error_message = os .strerror (0 ))
3537
3561
3538
3562
def change_subsystem_key (self , request , context = None ):
0 commit comments