|  |  | @ -508,6 +508,88 @@ TmEcode UnixSocketRegisterTenantHandler(json_t *cmd, json_t* answer, void *data) | 
			
		
	
		
		
			
				
					
					|  |  |  |     return TM_ECODE_OK; |  |  |  |     return TM_ECODE_OK; | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | /**
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  * \brief Command to remove a tenant handler | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  * | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  * \param cmd the content of command Arguments as a json_t object | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  * \param answer the json_t object that has to be used to answer | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  * \param data pointer to data defining the context here a PcapCommand:: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |  */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | TmEcode UnixSocketUnregisterTenantHandler(json_t *cmd, json_t* answer, void *data) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     const char *htype; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     json_int_t traffic_id = -1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if (!(DetectEngineMultiTenantEnabled())) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         SCLogInfo("error: multi-tenant support not enabled"); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         json_object_set_new(answer, "message", json_string("multi-tenant support not enabled")); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return TM_ECODE_FAILED; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /* 1 get tenant id */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     json_t *jarg = json_object_get(cmd, "id"); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if (!json_is_integer(jarg)) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         SCLogInfo("error: command is not a string"); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         json_object_set_new(answer, "message", json_string("id is not an integer")); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return TM_ECODE_FAILED; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     int tenant_id = json_integer_value(jarg); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /* 2 get tenant handler type */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     jarg = json_object_get(cmd, "htype"); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if (!json_is_string(jarg)) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         SCLogInfo("error: command is not a string"); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         json_object_set_new(answer, "message", json_string("command is not a string")); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return TM_ECODE_FAILED; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     htype = json_string_value(jarg); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     SCLogDebug("add-tenant-handler: %d %s", tenant_id, htype); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /* 3 get optional hargs */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     json_t *hargs = json_object_get(cmd, "hargs"); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if (hargs != NULL) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (!json_is_integer(hargs)) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             SCLogInfo("error: hargs not a number"); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             json_object_set_new(answer, "message", json_string("hargs not a number")); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             return TM_ECODE_FAILED; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         traffic_id = json_integer_value(hargs); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /* 4 add to system */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     int r = -1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if (strcmp(htype, "pcap") == 0) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         r = DetectEngineTentantUnregisterPcapFile(tenant_id); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } else if (strcmp(htype, "vlan") == 0) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (traffic_id < 0) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             json_object_set_new(answer, "message", json_string("vlan requires argument")); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             return TM_ECODE_FAILED; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (traffic_id > USHRT_MAX) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             json_object_set_new(answer, "message", json_string("vlan argument out of range")); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             return TM_ECODE_FAILED; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         SCLogInfo("VLAN handler: id %u maps to tenant %u", (uint32_t)traffic_id, tenant_id); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         r = DetectEngineTentantUnregisterVlanId(tenant_id, (uint32_t)traffic_id); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if (r != 0) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         json_object_set_new(answer, "message", json_string("handler unregister failure")); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return TM_ECODE_FAILED; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     /* 5 apply it */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if (DetectEngineMTApply() < 0) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         json_object_set_new(answer, "message", json_string("couldn't apply settings")); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         // TODO cleanup
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return TM_ECODE_FAILED; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     json_object_set_new(answer, "message", json_string("handler added")); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     return TM_ECODE_OK; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | /**
 |  |  |  | /**
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  * \brief Command to add a tenant |  |  |  |  * \brief Command to add a tenant | 
			
		
	
		
		
			
				
					
					|  |  |  |  * |  |  |  |  * | 
			
		
	
	
		
		
			
				
					|  |  | 
 |