|
@@ -64,11 +64,11 @@ class container_post(Resource):
|
|
|
print("api call: %s, container_id: %s" % (api_call_method_name, container_id))
|
|
|
return api_call_method(container_id)
|
|
|
except Exception as e:
|
|
|
- print("error - container_post: %s" % str(e))
|
|
|
+ print("error - container_post: %s" % str(e))
|
|
|
return jsonify(type='danger', msg=str(e))
|
|
|
|
|
|
else:
|
|
|
- return jsonify(type='danger', msg='invalid container id or missing action')
|
|
|
+ return jsonify(type='danger', msg='invalid container id or missing action')
|
|
|
|
|
|
|
|
|
# api call: container_post - post_action: stop
|
|
@@ -107,7 +107,7 @@ class container_post(Resource):
|
|
|
|
|
|
# api call: container_post - post_action: exec - cmd: mailq - task: delete
|
|
|
def container_post__exec__mailq__delete(self, container_id):
|
|
|
- if 'items' in request.json:
|
|
|
+ if 'items' in request.json:
|
|
|
r = re.compile("^[0-9a-fA-F]+$")
|
|
|
filtered_qids = filter(r.match, request.json['items'])
|
|
|
if filtered_qids:
|
|
@@ -121,7 +121,7 @@ class container_post(Resource):
|
|
|
|
|
|
# api call: container_post - post_action: exec - cmd: mailq - task: hold
|
|
|
def container_post__exec__mailq__hold(self, container_id):
|
|
|
- if 'items' in request.json:
|
|
|
+ if 'items' in request.json:
|
|
|
r = re.compile("^[0-9a-fA-F]+$")
|
|
|
filtered_qids = filter(r.match, request.json['items'])
|
|
|
if filtered_qids:
|
|
@@ -135,7 +135,7 @@ class container_post(Resource):
|
|
|
|
|
|
# api call: container_post - post_action: exec - cmd: mailq - task: unhold
|
|
|
def container_post__exec__mailq__unhold(self, container_id):
|
|
|
- if 'items' in request.json:
|
|
|
+ if 'items' in request.json:
|
|
|
r = re.compile("^[0-9a-fA-F]+$")
|
|
|
filtered_qids = filter(r.match, request.json['items'])
|
|
|
if filtered_qids:
|
|
@@ -149,7 +149,7 @@ class container_post(Resource):
|
|
|
|
|
|
# api call: container_post - post_action: exec - cmd: mailq - task: deliver
|
|
|
def container_post__exec__mailq__deliver(self, container_id):
|
|
|
- if 'items' in request.json:
|
|
|
+ if 'items' in request.json:
|
|
|
r = re.compile("^[0-9a-fA-F]+$")
|
|
|
filtered_qids = filter(r.match, request.json['items'])
|
|
|
if filtered_qids:
|
|
@@ -206,7 +206,7 @@ class container_post(Resource):
|
|
|
def container_post__exec__system__df(self, container_id):
|
|
|
if 'dir' in request.json:
|
|
|
for container in docker_client.containers.list(filters={"id": container_id}):
|
|
|
- df_return = container.exec_run(["/bin/bash", "-c", "/bin/df -H '" + request.json['dir'].replace("'", "'\\''") + "' | /usr/bin/tail -n1 | /usr/bin/tr -s [:blank:] | /usr/bin/tr ' ' ','"], user='nobody')
|
|
|
+ df_return = container.exec_run(["/bin/bash", "-c", "/bin/df '" + request.json['dir'].replace("'", "'\\''") + "' | /usr/bin/tail -n1 | /usr/bin/tr -s [:blank:] | /usr/bin/tr ' ' ','"], user='nobody')
|
|
|
if df_return.exit_code == 0:
|
|
|
return df_return.output.decode('utf-8').rstrip()
|
|
|
else:
|
|
@@ -264,7 +264,7 @@ class container_post(Resource):
|
|
|
def container_post__exec__sieve__print(self, container_id):
|
|
|
if 'username' in request.json and 'script_name' in request.json:
|
|
|
for container in docker_client.containers.list(filters={"id": container_id}):
|
|
|
- cmd = ["/bin/bash", "-c", "/usr/bin/doveadm sieve get -u '" + request.json['username'].replace("'", "'\\''") + "' '" + request.json['script_name'].replace("'", "'\\''") + "'"]
|
|
|
+ cmd = ["/bin/bash", "-c", "/usr/bin/doveadm sieve get -u '" + request.json['username'].replace("'", "'\\''") + "' '" + request.json['script_name'].replace("'", "'\\''") + "'"]
|
|
|
sieve_return = container.exec_run(cmd)
|
|
|
return exec_run_handler('utf8_text_only', sieve_return)
|
|
|
|
|
@@ -286,7 +286,7 @@ class container_post(Resource):
|
|
|
for container in docker_client.containers.list(filters={"id": container_id}):
|
|
|
cmd = "/usr/bin/rspamadm pw -e -p '" + request.json['raw'].replace("'", "'\\''") + "' 2> /dev/null"
|
|
|
cmd_response = exec_cmd_container(container, cmd, user="_rspamd")
|
|
|
-
|
|
|
+
|
|
|
matched = False
|
|
|
for line in cmd_response.split("\n"):
|
|
|
if '$2$' in line:
|
|
@@ -306,7 +306,7 @@ class container_post(Resource):
|
|
|
return jsonify(type='success', msg='command completed successfully')
|
|
|
else:
|
|
|
return jsonify(type='danger', msg='command did not complete')
|
|
|
-
|
|
|
+
|
|
|
|
|
|
def exec_cmd_container(container, cmd, user, timeout=2, shell_cmd="/bin/bash"):
|
|
|
|
|
@@ -333,7 +333,7 @@ def exec_cmd_container(container, cmd, user, timeout=2, shell_cmd="/bin/bash"):
|
|
|
except:
|
|
|
pass
|
|
|
return ''.join(total_data)
|
|
|
-
|
|
|
+
|
|
|
try :
|
|
|
socket = container.exec_run([shell_cmd], stdin=True, socket=True, user=user).output._sock
|
|
|
if not cmd.endswith("\n"):
|