configd: support "errors:no" clause on actions, closes https://github.com/opnsense/core/issues/8525

This commit is contained in:
Ad Schellevis 2025-04-09 17:36:13 +02:00
parent 8d3d392ae6
commit 9f7a1fa062
3 changed files with 10 additions and 17 deletions

View File

@ -42,6 +42,7 @@ class BaseAction:
self.parameters = action_parameters.get('parameters', None)
self.message = action_parameters.get('message', None)
self.description = action_parameters.get('description', '')
self.disable_errors = action_parameters.get('errors', '').lower().strip() == 'no'
if action_parameters.get('cache_ttl', '').isdigit():
self.cache_ttl = int(action_parameters['cache_ttl'])
else:

View File

@ -37,18 +37,10 @@ class Action(BaseAction):
except TypeError as e:
return str(e)
try:
exit_status = subprocess.call(script_command, env=self.config_environment, shell=True)
proc = subprocess.run(script_command, env=self.config_environment, shell=True)
# send response
if exit_status == 0:
if proc.returncode == 0 or self.disable_errors:
return 'OK'
else:
syslog_error('[%s] returned exit status %d' % (message_uuid, exit_status))
return 'Error (%d)' % exit_status
except Exception as script_exception:
syslog_error('[%s] Script action failed with %s at %s' % (
message_uuid,
script_exception,
traceback.format_exc()
))
return 'Execute error'
syslog_error('[%s] returned exit status %d' % (message_uuid, proc.returncode))
return 'Error (%d)' % proc.returncode

View File

@ -75,8 +75,8 @@ class Action(BaseAction):
'filename': output_stream.name,
'expire': time.time() + self.cache_ttl
}
subprocess.check_call(script_command, env=self.config_environment, shell=True,
stdout=output_stream, stderr=error_stream)
subprocess.run(script_command, env=self.config_environment, shell=True,
check=not self.disable_errors, stdout=output_stream, stderr=error_stream)
output_stream.seek(0)
error_stream.seek(0)
script_output = output_stream.read()