From 5cfc3f07afefdb77a9906a661f2d827021bcb813 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Tue, 14 Jul 2026 09:48:09 -0400 Subject: [PATCH] Fix nodemedia attach The hardening blocked all URL patters. --- confluent_server/confluent/messages.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/confluent_server/confluent/messages.py b/confluent_server/confluent/messages.py index 79ebcc6b..67c914c9 100644 --- a/confluent_server/confluent/messages.py +++ b/confluent_server/confluent/messages.py @@ -578,6 +578,8 @@ def get_input_message(path, operation, inputdata, nodes=None, multinode=False, return InputPowerMessage(path, nodes, inputdata) elif '/'.join(path).startswith('media/detach'): return DetachMedia(path, nodes, inputdata) + elif '/'.join(path).startswith('media/attach') and inputdata: + return InputMediaUrl(path, nodes, inputdata, configmanager) elif '/'.join(path).startswith('media/') and inputdata: return InputMedia(path, nodes, inputdata, configmanager) elif '/'.join(path).startswith('support/servicedata') and inputdata: @@ -620,9 +622,14 @@ def checkaccess(user, filename, pwent): return True return False +def isurl(value): + prefix, value = value.split('://', 1) if '://' in value else (None, value) + if '/' in prefix: + return False + return True if prefix else False class InputFirmwareUpdate(ConfluentMessage): - + urlsupported = False def __init__(self, path, nodes, inputdata, configmanager): self._filename = inputdata.get('filename', inputdata.get('url', inputdata.get('dirname', None))) self.bank = inputdata.get('bank', None) @@ -639,6 +646,9 @@ class InputFirmwareUpdate(ConfluentMessage): node, value = expanded if value != self._filename: self._complexname = True + if self.urlsupported and isurl(value): + self.filebynode[node] = value + continue value = os.path.normpath(value) if value not in checkedfiles: if value.startswith('../'): @@ -697,6 +707,11 @@ class InputMedia(InputFirmwareUpdate): # Use InputFirmwareUpdate pass +class InputMediaUrl(InputFirmwareUpdate): + # Use InputFirmwareUpdate for URL-based media attachment + urlsupported = True + pass + class InputLicense(InputFirmwareUpdate): pass