mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-11-03 20:38:59 +00:00 
			
		
		
		
	res_stir_shaken: Check for disabled before param validation
For both attestation and verification, we now check whether they've been disabled either globally or by the profile before validating things like callerid, orig_tn, dest_tn, etc. This prevents useless error messages. Resolves: #879
This commit is contained in:
		
				
					committed by
					
						
						asterisk-org-access-app[bot]
					
				
			
			
				
	
			
			
			
						parent
						
							0034c23285
						
					
				
				
					commit
					dd348e55aa
				
			@@ -75,37 +75,18 @@ enum ast_stir_shaken_as_response_code
 | 
				
			|||||||
	RAII_VAR(char *, canon_dest_tn , canonicalize_tn_alloc(dest_tn), ast_free);
 | 
						RAII_VAR(char *, canon_dest_tn , canonicalize_tn_alloc(dest_tn), ast_free);
 | 
				
			||||||
	RAII_VAR(char *, canon_orig_tn , canonicalize_tn_alloc(orig_tn), ast_free);
 | 
						RAII_VAR(char *, canon_orig_tn , canonicalize_tn_alloc(orig_tn), ast_free);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SCOPE_ENTER(3, "%s: Enter\n", tag);
 | 
						const char *t = S_OR(tag, S_COR(chan, ast_channel_name(chan), ""));
 | 
				
			||||||
 | 
						SCOPE_ENTER(3, "%s: Enter\n", t);
 | 
				
			||||||
	if (!canon_orig_tn) {
 | 
					 | 
				
			||||||
		SCOPE_EXIT_LOG_RTN_VALUE(AST_STIR_SHAKEN_AS_INVALID_ARGUMENTS,
 | 
					 | 
				
			||||||
			LOG_ERROR, "%s: Must provide caller_id/orig_tn\n", tag);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (!canon_dest_tn) {
 | 
					 | 
				
			||||||
		SCOPE_EXIT_LOG_RTN_VALUE(AST_STIR_SHAKEN_AS_INVALID_ARGUMENTS,
 | 
					 | 
				
			||||||
			LOG_ERROR, "%s: Must provide dest_tn\n", tag);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (ast_strlen_zero(tag)) {
 | 
					 | 
				
			||||||
		SCOPE_EXIT_LOG_RTN_VALUE(AST_STIR_SHAKEN_AS_INVALID_ARGUMENTS,
 | 
					 | 
				
			||||||
			LOG_ERROR, "%s: Must provide tag\n", tag);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (!ctxout) {
 | 
					 | 
				
			||||||
		SCOPE_EXIT_LOG_RTN_VALUE(AST_STIR_SHAKEN_AS_INVALID_ARGUMENTS,
 | 
					 | 
				
			||||||
			LOG_ERROR, "%s: Must provide ctxout\n", tag);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (ast_strlen_zero(profile_name)) {
 | 
					 | 
				
			||||||
		SCOPE_EXIT_RTN_VALUE(AST_STIR_SHAKEN_AS_DISABLED,
 | 
					 | 
				
			||||||
			"%s: Disabled due to missing profile name\n", tag);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	as_cfg = as_get_cfg();
 | 
						as_cfg = as_get_cfg();
 | 
				
			||||||
	if (as_cfg->global_disable) {
 | 
						if (as_cfg->global_disable) {
 | 
				
			||||||
		SCOPE_EXIT_RTN_VALUE(AST_STIR_SHAKEN_AS_DISABLED,
 | 
							SCOPE_EXIT_RTN_VALUE(AST_STIR_SHAKEN_AS_DISABLED,
 | 
				
			||||||
			"%s: Globally disabled\n", tag);
 | 
								"%s: Globally disabled\n", t);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (ast_strlen_zero(profile_name)) {
 | 
				
			||||||
 | 
							SCOPE_EXIT_RTN_VALUE(AST_STIR_SHAKEN_AS_DISABLED,
 | 
				
			||||||
 | 
								"%s: Disabled due to missing profile name\n", t);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	eprofile = eprofile_get_cfg(profile_name);
 | 
						eprofile = eprofile_get_cfg(profile_name);
 | 
				
			||||||
@@ -117,7 +98,27 @@ enum ast_stir_shaken_as_response_code
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (!PROFILE_ALLOW_ATTEST(eprofile)) {
 | 
						if (!PROFILE_ALLOW_ATTEST(eprofile)) {
 | 
				
			||||||
		SCOPE_EXIT_RTN_VALUE(AST_STIR_SHAKEN_AS_DISABLED,
 | 
							SCOPE_EXIT_RTN_VALUE(AST_STIR_SHAKEN_AS_DISABLED,
 | 
				
			||||||
			"%s: Disabled by profile\n", tag);
 | 
								"%s: Disabled by profile '%s'\n", t, profile_name);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (ast_strlen_zero(tag)) {
 | 
				
			||||||
 | 
							SCOPE_EXIT_LOG_RTN_VALUE(AST_STIR_SHAKEN_AS_INVALID_ARGUMENTS,
 | 
				
			||||||
 | 
								LOG_ERROR, "%s: Must provide tag\n", t);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!canon_orig_tn) {
 | 
				
			||||||
 | 
							SCOPE_EXIT_LOG_RTN_VALUE(AST_STIR_SHAKEN_AS_INVALID_ARGUMENTS,
 | 
				
			||||||
 | 
								LOG_ERROR, "%s: Must provide caller_id/orig_tn\n", tag);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!canon_dest_tn) {
 | 
				
			||||||
 | 
							SCOPE_EXIT_LOG_RTN_VALUE(AST_STIR_SHAKEN_AS_INVALID_ARGUMENTS,
 | 
				
			||||||
 | 
								LOG_ERROR, "%s: Must provide dest_tn\n", tag);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!ctxout) {
 | 
				
			||||||
 | 
							SCOPE_EXIT_LOG_RTN_VALUE(AST_STIR_SHAKEN_AS_INVALID_ARGUMENTS,
 | 
				
			||||||
 | 
								LOG_ERROR, "%s: Must provide ctxout\n", tag);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	etn = tn_get_etn(canon_orig_tn, eprofile);
 | 
						etn = tn_get_etn(canon_orig_tn, eprofile);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -660,14 +660,10 @@ enum ast_stir_shaken_vs_response_code
 | 
				
			|||||||
	const char *t = S_OR(tag, S_COR(chan, ast_channel_name(chan), ""));
 | 
						const char *t = S_OR(tag, S_COR(chan, ast_channel_name(chan), ""));
 | 
				
			||||||
	SCOPE_ENTER(3, "%s: Enter\n", t);
 | 
						SCOPE_ENTER(3, "%s: Enter\n", t);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ast_strlen_zero(tag)) {
 | 
						vs = vs_get_cfg();
 | 
				
			||||||
		SCOPE_EXIT_LOG_RTN_VALUE(AST_STIR_SHAKEN_VS_INVALID_ARGUMENTS,
 | 
						if (vs->global_disable) {
 | 
				
			||||||
			LOG_ERROR, "%s: Must provide tag\n", t);
 | 
							SCOPE_EXIT_RTN_VALUE(AST_STIR_SHAKEN_VS_DISABLED,
 | 
				
			||||||
	}
 | 
								"%s: Globally disabled\n", t);
 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (ast_strlen_zero(canon_caller_id)) {
 | 
					 | 
				
			||||||
		SCOPE_EXIT_LOG_RTN_VALUE(AST_STIR_SHAKEN_VS_INVALID_ARGUMENTS,
 | 
					 | 
				
			||||||
		LOG_ERROR, "%s: Must provide caller_id\n", t);
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (ast_strlen_zero(profile_name)) {
 | 
						if (ast_strlen_zero(profile_name)) {
 | 
				
			||||||
@@ -675,12 +671,6 @@ enum ast_stir_shaken_vs_response_code
 | 
				
			|||||||
			"%s: Disabled due to missing profile name\n", t);
 | 
								"%s: Disabled due to missing profile name\n", t);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	vs = vs_get_cfg();
 | 
					 | 
				
			||||||
	if (vs->global_disable) {
 | 
					 | 
				
			||||||
		SCOPE_EXIT_RTN_VALUE(AST_STIR_SHAKEN_VS_DISABLED,
 | 
					 | 
				
			||||||
			"%s: Globally disabled\n", t);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	profile = eprofile_get_cfg(profile_name);
 | 
						profile = eprofile_get_cfg(profile_name);
 | 
				
			||||||
	if (!profile) {
 | 
						if (!profile) {
 | 
				
			||||||
		SCOPE_EXIT_LOG_RTN_VALUE(AST_STIR_SHAKEN_VS_DISABLED,
 | 
							SCOPE_EXIT_LOG_RTN_VALUE(AST_STIR_SHAKEN_VS_DISABLED,
 | 
				
			||||||
@@ -690,7 +680,17 @@ enum ast_stir_shaken_vs_response_code
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (!PROFILE_ALLOW_VERIFY(profile)) {
 | 
						if (!PROFILE_ALLOW_VERIFY(profile)) {
 | 
				
			||||||
		SCOPE_EXIT_RTN_VALUE(AST_STIR_SHAKEN_VS_DISABLED,
 | 
							SCOPE_EXIT_RTN_VALUE(AST_STIR_SHAKEN_VS_DISABLED,
 | 
				
			||||||
			"%s: Disabled by profile\n", t);
 | 
								"%s: Disabled by profile '%s'\n", t, profile_name);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (ast_strlen_zero(tag)) {
 | 
				
			||||||
 | 
							SCOPE_EXIT_LOG_RTN_VALUE(AST_STIR_SHAKEN_VS_INVALID_ARGUMENTS,
 | 
				
			||||||
 | 
								LOG_ERROR, "%s: Must provide tag\n", t);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (ast_strlen_zero(canon_caller_id)) {
 | 
				
			||||||
 | 
							SCOPE_EXIT_LOG_RTN_VALUE(AST_STIR_SHAKEN_VS_INVALID_ARGUMENTS,
 | 
				
			||||||
 | 
							LOG_ERROR, "%s: Must provide caller_id\n", t);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx = ao2_alloc_options(sizeof(*ctx), ctx_destructor,
 | 
						ctx = ao2_alloc_options(sizeof(*ctx), ctx_destructor,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user