diff --git a/0001-fix-metric-proxy-init-failed-error.patch b/0001-fix-metric-proxy-init-failed-error.patch deleted file mode 100644 index ca84d256b08f50312c9910ecd4ba85a97a7a5661..0000000000000000000000000000000000000000 --- a/0001-fix-metric-proxy-init-failed-error.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 833a9d721bed5b3e64ea49710a477a52b74c5255 Mon Sep 17 00:00:00 2001 -From: zhangdaolong -Date: Thu, 12 Oct 2023 14:28:06 +0800 -Subject: [PATCH 1/1] fix metric proxy init failed error -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - zeus/database/proxy/metric.py | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/zeus/database/proxy/metric.py b/zeus/database/proxy/metric.py -index e899e26..5fa75e9 100644 ---- a/zeus/database/proxy/metric.py -+++ b/zeus/database/proxy/metric.py -@@ -21,6 +21,7 @@ from prometheus_api_client import PrometheusApiClientException - from vulcanus.database.proxy import PromDbProxy - from vulcanus.log.log import LOGGER - from vulcanus.restful.resp.state import SUCCEED, DATABASE_QUERY_ERROR, NO_DATA, PARAM_ERROR, PARTIAL_SUCCEED -+from zeus.conf import configuration - - - class MetricProxy(PromDbProxy): -@@ -28,16 +29,15 @@ class MetricProxy(PromDbProxy): - Proxy of prometheus time series database - """ - -- def __init__(self, configuration, host=None, port=None): -+ def __init__(self, host=None, port=None): - """ - Init MetricProxy - - Args: -- configuration (Config) - host (str) - port (int) - """ -- PromDbProxy.__init__(self, configuration, host, port) -+ PromDbProxy.__init__(self, host, port) - self.default_instance_port = configuration.agent.get('DEFAULT_INSTANCE_PORT') or 9100 - self.query_range_step = configuration.prometheus.get('QUERY_RANGE_STEP') or "15s" - --- -2.33.0 - diff --git a/0002-add-key-authentication-for-add-host-api.patch b/0002-add-key-authentication-for-add-host-api.patch deleted file mode 100644 index 8a3c9e166e9936d4616345c3720d024990c7c2f2..0000000000000000000000000000000000000000 --- a/0002-add-key-authentication-for-add-host-api.patch +++ /dev/null @@ -1,298 +0,0 @@ -From 7a8164696bb913a75cf79cf6b57c9973530efefa Mon Sep 17 00:00:00 2001 -From: rabbitali -Date: Sun, 15 Oct 2023 16:37:55 +0800 -Subject: [PATCH 1/1] add a way about key authentication for add host api -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - database/zeus.sql | 2 +- - zeus/conf/constant.py | 6 +-- - zeus/database/table.py | 2 +- - zeus/function/verify/host.py | 4 +- - zeus/host_manager/view.py | 99 ++++++++++++++++++++++++++++-------- - 5 files changed, 85 insertions(+), 28 deletions(-) - -diff --git a/database/zeus.sql b/database/zeus.sql -index 3dc9f3c..7db734e 100644 ---- a/database/zeus.sql -+++ b/database/zeus.sql -@@ -42,7 +42,7 @@ CREATE TABLE IF NOT EXISTS `host` ( - `os_version` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `ssh_user` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `ssh_port` int(11) NULL DEFAULT NULL, -- `pkey` varchar(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, -+ `pkey` varchar(4096) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `status` int(11) NULL DEFAULT NULL, - `user` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL, - `host_group_id` int(11) NULL DEFAULT NULL, -diff --git a/zeus/conf/constant.py b/zeus/conf/constant.py -index 3175c65..bf8792a 100644 ---- a/zeus/conf/constant.py -+++ b/zeus/conf/constant.py -@@ -90,9 +90,9 @@ CHECK_IDENTIFY_SCENE = "/check/scene/identify" - CHECK_WORKFLOW_HOST_EXIST = '/check/workflow/host/exist' - - # host template file content --HOST_TEMPLATE_FILE_CONTENT = """host_ip,ssh_port,ssh_user,password,host_name,host_group_name,management --test_ip_1,22,root,password,test_host,test_host_group,False --test_ip_2,22,root,password,test_host,test_host_group,False -+HOST_TEMPLATE_FILE_CONTENT = """host_ip,ssh_port,ssh_user,password,ssh_pkey,host_name,host_group_name,management -+test_ip_1,22,root,password,ssh_pkey,test_host,test_host_group,False -+test_ip_2,22,root,password,ssh_pkey,test_host,test_host_group,False - """ - - -diff --git a/zeus/database/table.py b/zeus/database/table.py -index 9596492..265eb45 100644 ---- a/zeus/database/table.py -+++ b/zeus/database/table.py -@@ -59,7 +59,7 @@ class Host(Base, MyBase): # pylint: disable=R0903 - os_version = Column(String(40)) - ssh_user = Column(String(40), default="root") - ssh_port = Column(Integer(), default=22) -- pkey = Column(String(2048)) -+ pkey = Column(String(4096)) - status = Column(Integer(), default=2) - - user = Column(String(40), ForeignKey('user.username')) -diff --git a/zeus/function/verify/host.py b/zeus/function/verify/host.py -index b054d62..d09eedd 100644 ---- a/zeus/function/verify/host.py -+++ b/zeus/function/verify/host.py -@@ -103,11 +103,12 @@ class AddHostSchema(Schema): - """ - - ssh_user = fields.String(required=True, validate=lambda s: len(s) > 0) -- password = fields.String(required=True, validate=lambda s: len(s) > 0) -+ password = fields.String(required=True, allow_none=True, validate=lambda s: len(s) >= 0) - host_name = fields.String( - required=True, validate=[validate.Length(min=1, max=50), ValidateRules.space_character_check] - ) - host_ip = fields.IP(required=True) -+ ssh_pkey = fields.String(required=True, allow_none=True, validate=lambda s: 4096 >= len(s) >= 0) - ssh_port = fields.Integer(required=True, validate=lambda s: 65535 >= s > 0) - host_group_name = fields.String(required=True, validate=lambda s: len(s) > 0) - management = fields.Boolean(required=True) -@@ -133,3 +134,4 @@ class UpdateHostSchema(Schema): - host_name = fields.String(required=False, validate=lambda s: len(s) > 0) - host_group_name = fields.String(required=False, validate=lambda s: len(s) > 0) - management = fields.Boolean(required=False) -+ ssh_pkey = fields.String(required=False, validate=lambda s: 4096 >= len(s) >= 0) -diff --git a/zeus/host_manager/view.py b/zeus/host_manager/view.py -index 768d2cd..95e1434 100644 ---- a/zeus/host_manager/view.py -+++ b/zeus/host_manager/view.py -@@ -16,12 +16,13 @@ Author: - Description: Restful APIs for host - """ - import json --from io import BytesIO -+from io import BytesIO, StringIO - from typing import Iterable, List, Tuple, Union - import socket - - import gevent - import paramiko -+from paramiko.ssh_exception import SSHException - from flask import request, send_file - from marshmallow import Schema - from marshmallow.fields import Boolean -@@ -333,7 +334,8 @@ class AddHost(BaseResponse): - "host_ip":"127.0.0.1", - "ssh_port":"22", - "management":false, -- "username": "admin" -+ "username": "admin", -+ "ssh_pkey": "RSA key" - } - - Returns: -@@ -363,6 +365,7 @@ class AddHost(BaseResponse): - "ssh_port": host_info.get("ssh_port"), - "user": host_info.get("username"), - "management": host_info.get("management"), -+ "pkey": host_info.get("ssh_pkey"), - } - ) - if host in hosts: -@@ -384,7 +387,8 @@ class AddHost(BaseResponse): - "host_ip":"127.0.0.1", - "ssh_port":"22", - "management":false, -- "username": "admin" -+ "username": "admin", -+ "ssh_pkey": "RSA key" - } - - Returns: -@@ -396,15 +400,55 @@ class AddHost(BaseResponse): - if status != state.SUCCEED: - return self.response(code=status) - -- status, private_key = save_ssh_public_key_to_client( -- params.get('host_ip'), params.get('ssh_port'), params.get('ssh_user'), params.get('password') -- ) -- if status == state.SUCCEED: -- host.pkey = private_key -- host.status = HostStatus.ONLINE -+ if params.get("ssh_pkey"): -+ status = verify_ssh_login_info( -+ ClientConnectArgs( -+ params.get("host_ip"), params.get("ssh_port"), params.get("ssh_user"), params.get("ssh_pkey") -+ ) -+ ) -+ host.status = HostStatus.ONLINE if status == state.SUCCEED else HostStatus.UNESTABLISHED -+ else: -+ status, private_key = save_ssh_public_key_to_client( -+ params.get('host_ip'), params.get('ssh_port'), params.get('ssh_user'), params.get('password') -+ ) -+ if status == state.SUCCEED: -+ host.pkey = private_key -+ host.status = HostStatus.ONLINE - return self.response(code=self.proxy.add_host(host)) - - -+def verify_ssh_login_info(ssh_login_info: ClientConnectArgs) -> str: -+ """ -+ Verify that the ssh login information is correct -+ -+ Args: -+ ssh_login_info(ClientConnectArgs): e.g -+ ClientConnectArgs(host_ip='127.0.0.1', ssh_port=22, ssh_user='root', pkey=RSAKey string) -+ -+ Returns: -+ status code -+ """ -+ try: -+ client = SSH( -+ ip=ssh_login_info.host_ip, -+ username=ssh_login_info.ssh_user, -+ port=ssh_login_info.ssh_port, -+ pkey=paramiko.RSAKey.from_private_key(StringIO(ssh_login_info.pkey)), -+ ) -+ client.close() -+ except socket.error as error: -+ LOGGER.error(error) -+ return state.SSH_CONNECTION_ERROR -+ except SSHException as error: -+ LOGGER.error(error) -+ return state.SSH_AUTHENTICATION_ERROR -+ except Exception as error: -+ LOGGER.error(error) -+ return state.SSH_CONNECTION_ERROR -+ -+ return state.SUCCEED -+ -+ - def save_ssh_public_key_to_client(ip: str, port: int, username: str, password: str) -> tuple: - """ - generate RSA key pair,save public key to the target host machine -@@ -465,7 +509,7 @@ class GetHostTemplateFile(BaseResponse): - file = BytesIO() - file.write(HOST_TEMPLATE_FILE_CONTENT.encode('utf-8')) - file.seek(0) -- response = send_file(file,mimetype="application/octet-stream") -+ response = send_file(file, mimetype="application/octet-stream") - response.headers['Content-Disposition'] = 'attachment; filename=template.csv' - return response - -@@ -574,6 +618,7 @@ class AddHostBatch(BaseResponse): - continue - - password = host_info.pop("password") -+ pkey = host_info.pop("ssh_pkey", None) - host_info.update( - {"host_group_id": group_id_info.get(host_info['host_group_name']), "user": data["username"]} - ) -@@ -585,7 +630,7 @@ class AddHostBatch(BaseResponse): - ) - continue - -- valid_host.append((host, password)) -+ valid_host.append((host, password, pkey)) - return valid_host - - def save_key_to_client(self, host_connect_infos: List[tuple]) -> list: -@@ -598,8 +643,8 @@ class AddHostBatch(BaseResponse): - Returns: - host object list - """ -- # 30 connections are created at a time. -- tasks = [host_connect_infos[index : index + 30] for index in range(0, len(host_connect_infos), 30)] -+ # 100 connections are created at a time. -+ tasks = [host_connect_infos[index : index + 100] for index in range(0, len(host_connect_infos), 100)] - result = [] - - for task in tasks: -@@ -612,18 +657,23 @@ class AddHostBatch(BaseResponse): - return result - - @staticmethod -- def update_rsa_key_to_host(host: Host, password: str) -> Host: -+ def update_rsa_key_to_host(host: Host, password: str = None, pkey: str = None) -> Host: - """ - save ssh public key to client and update its private key in host - - Args: - host(Host): host object - password(str): password for ssh login -+ pkey(str): rsa key for ssh login - - Returns: - host object - """ -- status, pkey = save_ssh_public_key_to_client(host.host_ip, host.ssh_port, host.ssh_user, password) -+ if pkey: -+ status = verify_ssh_login_info(ClientConnectArgs(host.host_ip, host.ssh_port, host.ssh_user, pkey)) -+ else: -+ status, pkey = save_ssh_public_key_to_client(host.host_ip, host.ssh_port, host.ssh_user, password) -+ - if status == state.SUCCEED: - host.status = HostStatus.ONLINE - host.pkey = pkey -@@ -654,7 +704,7 @@ class AddHostBatch(BaseResponse): - new_host.update(update_info) - self.add_result.append(new_host) - else: -- for host, _ in hosts: -+ for host, _, _ in hosts: - new_host = { - "host_ip": host.host_ip, - "ssh_port": host.ssh_port, -@@ -789,9 +839,14 @@ class UpdateHost(BaseResponse): - """ - ssh_user = params.get("ssh_user") or self.host.ssh_user - ssh_port = params.get("ssh_port") or self.host.ssh_port -- status, private_key = save_ssh_public_key_to_client( -- self.host.host_ip, ssh_port, ssh_user, params.pop("password", None) -- ) -+ private_key = params.pop("ssh_pkey", None) -+ if private_key: -+ status = verify_ssh_login_info(ClientConnectArgs(self.host.host_ip, ssh_port, ssh_user, private_key)) -+ else: -+ status, private_key = save_ssh_public_key_to_client( -+ self.host.host_ip, ssh_port, ssh_user, params.pop("password", None) -+ ) -+ - params.update( - { - "ssh_user": ssh_user, -@@ -876,10 +931,10 @@ class UpdateHost(BaseResponse): - return self.response(code=state.PARAM_ERROR, message="there is a duplicate host ssh address in database!") - - if params.get("ssh_user") or params.get("ssh_port"): -- if not params.get("password"): -- return self.response(code=state.PARAM_ERROR, message="please update password") -+ if not params.get("password") or not params.get("ssh_pkey"): -+ return self.response(code=state.PARAM_ERROR, message="please update password or authentication key.") - self._save_ssh_key(params) -- elif params.get("password"): -+ elif params.get("password") or params.get("ssh_pkey"): - self._save_ssh_key(params) - - return self.response(callback.update_host_info(params.pop("host_id"), params)) --- -2.33.0 - diff --git a/0004-update-the-template-file-contents-for-adding-hosts.patch b/0004-update-the-template-file-contents-for-adding-hosts.patch deleted file mode 100644 index ca6c95daa91791c2276f736f2ed14d7c4e63efeb..0000000000000000000000000000000000000000 --- a/0004-update-the-template-file-contents-for-adding-hosts.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 36d5b7a26f9f470e0b9a593edb7f198cd9022c47 Mon Sep 17 00:00:00 2001 -From: rabbitali -Date: Thu, 26 Oct 2023 18:43:37 +0800 -Subject: [PATCH] update the template file contents for adding hosts - ---- - zeus/conf/constant.py | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - -diff --git a/zeus/conf/constant.py b/zeus/conf/constant.py -index bf8792a..df2948d 100644 ---- a/zeus/conf/constant.py -+++ b/zeus/conf/constant.py -@@ -91,8 +91,14 @@ CHECK_WORKFLOW_HOST_EXIST = '/check/workflow/host/exist' - - # host template file content - HOST_TEMPLATE_FILE_CONTENT = """host_ip,ssh_port,ssh_user,password,ssh_pkey,host_name,host_group_name,management --test_ip_1,22,root,password,ssh_pkey,test_host,test_host_group,False --test_ip_2,22,root,password,ssh_pkey,test_host,test_host_group,False -+127.0.0.1,22,root,password,private key,test_host,test_host_group,FALSE -+127.0.0.1,23,root,password,private key,test_host,test_host_group,FALSE -+,,,,,,, -+"提示:",,,,,,, -+"1. 除登录密码与SSH登录秘钥外,其余信息都应提供有效值",,,,,,, -+"2. 登录密码与SSH登录秘钥可选择一种填入,当两者都提供时,以SSH登录秘钥为准",,,,,,, -+"3. 添加的主机信息不应存在重复信息(主机名称重复或者主机IP+端口重复)",,,,,,, -+"4. 上传本文件前,请删除此部分提示内容",,,,,,, - """ - - --- -2.33.0 - diff --git a/0005-bugfix-update-host-api-request-error.patch b/0005-bugfix-update-host-api-request-error.patch deleted file mode 100644 index d87c727716c67f34eb3e348182516b89d59aa261..0000000000000000000000000000000000000000 --- a/0005-bugfix-update-host-api-request-error.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 36f98b43bd571ac9f2f4f9a9fe658684d591d52e Mon Sep 17 00:00:00 2001 -From: rabbitali -Date: Fri, 27 Oct 2023 15:21:54 +0800 -Subject: [PATCH] bugfix: update host api request error when changing username - ---- - zeus/host_manager/view.py | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - -diff --git a/zeus/host_manager/view.py b/zeus/host_manager/view.py -index 95e1434..10418d1 100644 ---- a/zeus/host_manager/view.py -+++ b/zeus/host_manager/view.py -@@ -930,11 +930,11 @@ class UpdateHost(BaseResponse): - LOGGER.warning(f"there is a duplicate host address in database " f"when update host {self.host.host_id}!") - return self.response(code=state.PARAM_ERROR, message="there is a duplicate host ssh address in database!") - -- if params.get("ssh_user") or params.get("ssh_port"): -- if not params.get("password") or not params.get("ssh_pkey"): -- return self.response(code=state.PARAM_ERROR, message="please update password or authentication key.") -- self._save_ssh_key(params) -- elif params.get("password") or params.get("ssh_pkey"): -+ if params.get("password") or params.get("ssh_pkey"): - self._save_ssh_key(params) -+ return self.response(callback.update_host_info(params.pop("host_id"), params)) -+ -+ if params.get("ssh_user") or params.get("ssh_port"): -+ return self.response(code=state.PARAM_ERROR, message="please update password or authentication key.") - - return self.response(callback.update_host_info(params.pop("host_id"), params)) --- -2.33.0 - diff --git a/0006-optimize-import.patch b/0006-optimize-import.patch deleted file mode 100644 index 25676a3dc476ddf701d7a022c2cc1b57ebdf18bd..0000000000000000000000000000000000000000 --- a/0006-optimize-import.patch +++ /dev/null @@ -1,139 +0,0 @@ -From 6ba93db6c012b7547e80fc71e7dc3dd96d6f0aa4 Mon Sep 17 00:00:00 2001 -From: xuyongliang_01 -Date: Wed, 18 Oct 2023 02:49:04 +0000 -Subject: [PATCH 1/5] optimize Import -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Signed-off-by: xuyongliang_01 ---- - zeus/config_manager/view.py | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/zeus/config_manager/view.py b/zeus/config_manager/view.py -index 6779153..0aa9682 100644 ---- a/zeus/config_manager/view.py -+++ b/zeus/config_manager/view.py -@@ -22,7 +22,6 @@ from typing import List, Dict - from vulcanus.multi_thread_handler import MultiThreadHandler - from vulcanus.restful.resp import state - from vulcanus.restful.response import BaseResponse --from zeus.conf import configuration - from zeus.conf.constant import CERES_COLLECT_FILE, CERES_SYNC_CONF - from zeus.database.proxy.host import HostProxy - from zeus.function.model import ClientConnectArgs --- -Gitee - - -From a43c526f7e8dcda9fe9b46ff6e1f80f370954259 Mon Sep 17 00:00:00 2001 -From: xuyongliang_01 -Date: Wed, 18 Oct 2023 02:56:33 +0000 -Subject: [PATCH 2/5] update zeus/tests/host_manager/test_add_host.py. - -Signed-off-by: xuyongliang_01 ---- - zeus/tests/host_manager/test_add_host.py | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/zeus/tests/host_manager/test_add_host.py b/zeus/tests/host_manager/test_add_host.py -index c51be95..6b8b1b0 100644 ---- a/zeus/tests/host_manager/test_add_host.py -+++ b/zeus/tests/host_manager/test_add_host.py -@@ -17,7 +17,6 @@ from io import BytesIO - from unittest import mock - - import paramiko --import sqlalchemy - from paramiko import AuthenticationException - from sqlalchemy.orm.collections import InstrumentedList - --- -Gitee - - -From d03456b27fdc16c868c0b871b3f43786cc383146 Mon Sep 17 00:00:00 2001 -From: xuyongliang_01 -Date: Wed, 18 Oct 2023 02:58:24 +0000 -Subject: [PATCH 3/5] update zeus/host_manager/ssh.py. - -Signed-off-by: xuyongliang_01 ---- - zeus/host_manager/ssh.py | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/zeus/host_manager/ssh.py b/zeus/host_manager/ssh.py -index 11f6383..a4e7628 100644 ---- a/zeus/host_manager/ssh.py -+++ b/zeus/host_manager/ssh.py -@@ -15,7 +15,6 @@ from io import StringIO - from typing import Tuple - - import paramiko --from paramiko import sftp - - from vulcanus.log.log import LOGGER - from vulcanus.restful.resp import state --- -Gitee - - -From 887b9525192140c5142b62c14b91c1656b3a657a Mon Sep 17 00:00:00 2001 -From: xuyongliang_01 -Date: Wed, 18 Oct 2023 02:59:12 +0000 -Subject: [PATCH 4/5] update zeus/tests/host_manager/test_delete_host.py. - -Signed-off-by: xuyongliang_01 ---- - zeus/tests/host_manager/test_delete_host.py | 2 -- - 1 file changed, 2 deletions(-) - -diff --git a/zeus/tests/host_manager/test_delete_host.py b/zeus/tests/host_manager/test_delete_host.py -index 59a4098..5a0aea6 100644 ---- a/zeus/tests/host_manager/test_delete_host.py -+++ b/zeus/tests/host_manager/test_delete_host.py -@@ -12,8 +12,6 @@ - # ******************************************************************************/ - from unittest import mock - --import sqlalchemy -- - from vulcanus.exceptions import DatabaseConnectionFailed - from vulcanus.restful.resp import state - from vulcanus.restful.response import BaseResponse --- -Gitee - - -From 089c24550ae9f5720629376692344870316e97a6 Mon Sep 17 00:00:00 2001 -From: xuyongliang_01 -Date: Wed, 18 Oct 2023 03:00:38 +0000 -Subject: [PATCH 5/5] update zeus/vulnerability_manage/view.py. - -Signed-off-by: xuyongliang_01 ---- - zeus/vulnerability_manage/view.py | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/zeus/vulnerability_manage/view.py b/zeus/vulnerability_manage/view.py -index 345978f..c56f672 100644 ---- a/zeus/vulnerability_manage/view.py -+++ b/zeus/vulnerability_manage/view.py -@@ -15,12 +15,11 @@ import time - import threading - from typing import Dict, Tuple - --from flask import Response, request -+from flask import Response - import sqlalchemy - import gevent - - from vulcanus.log.log import LOGGER --from vulcanus.multi_thread_handler import MultiThreadHandler - from vulcanus.restful.resp import state - from vulcanus.restful.response import BaseResponse - from zeus.conf import configuration --- -Gitee - diff --git a/0007-add-an-api-for-querying-file-list.patch b/0007-add-an-api-for-querying-file-list.patch deleted file mode 100644 index def8749f8e6a0272755edcf07fb6b0af7a9bad22..0000000000000000000000000000000000000000 --- a/0007-add-an-api-for-querying-file-list.patch +++ /dev/null @@ -1,392 +0,0 @@ -From 318ad494e275d0404b2f1af768506a25c27028e2 Mon Sep 17 00:00:00 2001 -From: liulei <450962@qq.com> -Date: Tue, 31 Oct 2023 10:17:37 +0800 -Subject: [PATCH 1/2] Add an interface for querying file list -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - zeus/conf/constant.py | 2 + - zeus/config_manager/view.py | 42 +++++++++++- - zeus/function/verify/config.py | 8 +++ - zeus/vulnerability_manage/url.py | 113 +++++++++++++++++++++++++++++++ - 4 files changed, 163 insertions(+), 2 deletions(-) - create mode 100644 zeus/vulnerability_manage/url.py - -diff --git a/zeus/conf/constant.py b/zeus/conf/constant.py -index df2948d..44065be 100644 ---- a/zeus/conf/constant.py -+++ b/zeus/conf/constant.py -@@ -34,6 +34,7 @@ CERES_CVE_SCAN = "aops-ceres apollo --scan '%s'" - CERES_CVE_FIX = "aops-ceres apollo --fix '%s'" - CERES_CVE_ROLLBACK = "aops-ceres apollo --rollback '%s'" - CERES_SYNC_CONF = "aops-ceres sync --conf '%s'" -+CERES_OBJECT_FILE_CONF = "aops-ceres ragdoll --list '%s'" - - # zeus route - ADD_HOST = "/manage/host/add" -@@ -56,6 +57,7 @@ GET_GROUP = "/manage/host/group/get" - - COLLECT_CONFIG = '/manage/config/collect' - SYNC_CONFIG = '/manage/config/sync' -+OBJECT_FILE_CONFIG = '/manage/config/objectfile' - - USER_LOGIN = "/manage/account/login" - LOGOUT = "/manage/account/logout" -diff --git a/zeus/config_manager/view.py b/zeus/config_manager/view.py -index 0aa9682..bde6dbf 100644 ---- a/zeus/config_manager/view.py -+++ b/zeus/config_manager/view.py -@@ -22,10 +22,10 @@ from typing import List, Dict - from vulcanus.multi_thread_handler import MultiThreadHandler - from vulcanus.restful.resp import state - from vulcanus.restful.response import BaseResponse --from zeus.conf.constant import CERES_COLLECT_FILE, CERES_SYNC_CONF -+from zeus.conf.constant import CERES_COLLECT_FILE, CERES_SYNC_CONF, OBJECT_FILE_CONF, CERES_OBJECT_FILE_CONF - from zeus.database.proxy.host import HostProxy - from zeus.function.model import ClientConnectArgs --from zeus.function.verify.config import CollectConfigSchema, SyncConfigSchema -+from zeus.function.verify.config import CollectConfigSchema, SyncConfigSchema, ObjectFileConfigSchema - from zeus.host_manager.ssh import execute_command_and_parse_its_result, execute_command_sftp_result - - -@@ -290,3 +290,41 @@ class SyncConfig(BaseResponse): - sync_result['sync_result'] = True - return self.response(code=state.SUCCEED, data={"resp": sync_result}) - return self.response(code=state.UNKNOWN_ERROR, data={"resp": sync_result}) -+ -+ -+class ObjectFileConfig(BaseResponse): -+ -+ @staticmethod -+ def object_file_config_content(host_info: Dict, file_directory: str): -+ command = CERES_OBJECT_FILE_CONF % file_directory -+ status, content = execute_command_and_parse_its_result( -+ ClientConnectArgs(host_info.get("host_ip"), host_info.get("ssh_port"), -+ host_info.get("ssh_user"), host_info.get("pkey")), command) -+ return status, content -+ -+ @BaseResponse.handle(schema=ObjectFileConfigSchema, token=False) -+ def post(self, **params): -+ object_file_result = { -+ "object_file_paths": list(), -+ "object_file_result": False -+ } -+ # Query host address from database -+ proxy = HostProxy() -+ if not proxy.connect(): -+ return self.response(code=state.DATABASE_CONNECT_ERROR, data={"resp": object_file_result}) -+ -+ status, host_list = proxy.get_host_info( -+ {"username": "admin", "host_list": [params.get('host_id')]}, True) -+ if status != state.SUCCEED: -+ return self.response(code=status, data={"resp": object_file_result}) -+ -+ host_info = host_list[0] -+ status, content = self.object_file_config_content(host_info, params.get('file_directory')) -+ if status == state.SUCCEED: -+ object_file_result['object_file_result'] = True -+ content_res = json.loads(content) -+ if content_res.get("resp"): -+ resp = content_res.get("resp") -+ object_file_result['object_file_paths'] = resp -+ return self.response(code=state.SUCCEED, data={"resp": object_file_result}) -+ return self.response(code=state.UNKNOWN_ERROR, data={"resp": object_file_result}) -diff --git a/zeus/function/verify/config.py b/zeus/function/verify/config.py -index 6e5bf64..1ef7b97 100644 ---- a/zeus/function/verify/config.py -+++ b/zeus/function/verify/config.py -@@ -45,3 +45,11 @@ class SyncConfigSchema(Schema): - host_id = fields.Integer(required=True, validate=lambda s: s > 0) - file_path = fields.String(required=True, validate=lambda s: len(s) > 0) - content = fields.String(required=True, validate=lambda s: len(s) > 0) -+ -+ -+class ObjectFileConfigSchema(Schema): -+ """ -+ validators for ObjectFileConfigSchema -+ """ -+ host_id = fields.Integer(required=True, validate=lambda s: s > 0) -+ file_directory = fields.String(required=True, validate=lambda s: len(s) > 0) -diff --git a/zeus/vulnerability_manage/url.py b/zeus/vulnerability_manage/url.py -new file mode 100644 -index 0000000..fe464ac ---- /dev/null -+++ b/zeus/vulnerability_manage/url.py -@@ -0,0 +1,113 @@ -+#!/usr/bin/python3 -+# ****************************************************************************** -+# Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. -+# licensed under the Mulan PSL v2. -+# You can use this software according to the terms and conditions of the Mulan PSL v2. -+# You may obtain a copy of Mulan PSL v2 at: -+# http://license.coscl.org.cn/MulanPSL2 -+# THIS SOFTWARE IS PROVIDED ON AN 'AS IS' BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR -+# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR -+# PURPOSE. -+# See the Mulan PSL v2 for more details. -+# ******************************************************************************/ -+""" -+Time: -+Author: -+Description: url set -+""" -+from zeus.account_manager import view as account_view -+from zeus.agent_manager import view as agent_view -+from zeus.conf.constant import ( -+ ADD_GROUP, -+ ADD_HOST, -+ ADD_HOST_BATCH, -+ ADD_USER, -+ AGENT_METRIC_SET, -+ AGENT_PLUGIN_INFO, -+ AGENT_PLUGIN_SET, -+ AUTH_REDIRECT_URL, -+ BIND_AUTH_ACCOUNT, -+ CHANGE_PASSWORD, -+ COLLECT_CONFIG, -+ DELETE_GROUP, -+ DELETE_HOST, -+ EXECUTE_CVE_FIX, -+ EXECUTE_CVE_ROLLBACK, -+ EXECUTE_CVE_SCAN, -+ EXECUTE_REPO_SET, -+ GET_GROUP, -+ GET_HOST_COUNT, -+ GET_HOST_TEMPLATE_FILE, -+ GITEE_AUTH_LOGIN, -+ HOST_SCENE_GET, -+ LOGOUT, -+ QUERY_HOST, -+ QUERY_HOST_DETAIL, -+ QUERY_METRIC_DATA, -+ QUERY_METRIC_LIST, -+ QUERY_METRIC_NAMES, -+ REFRESH_TOKEN, -+ UPDATE_HOST, -+ USER_LOGIN, -+ SYNC_CONFIG, -+ OBJECT_FILE_CONFIG -+) -+from zeus.config_manager import view as config_view -+from zeus.host_manager import view as host_view -+from zeus.metric_manager import view as metric_view -+from zeus.vulnerability_manage import view as vulnerability_view -+ -+URLS = [] -+ -+SPECIFIC_URLS = { -+ "ACCOUNT_URLS": [ -+ (account_view.Login, USER_LOGIN), -+ (account_view.ChangePassword, CHANGE_PASSWORD), -+ (account_view.AddUser, ADD_USER), -+ (account_view.GiteeAuthLogin, GITEE_AUTH_LOGIN), -+ (account_view.AuthRedirectUrl, AUTH_REDIRECT_URL), -+ (account_view.BindAuthAccount, BIND_AUTH_ACCOUNT), -+ (account_view.RefreshToken, REFRESH_TOKEN), -+ (account_view.Logout, LOGOUT), -+ ], -+ "HOST_URLS": [ -+ (host_view.AddHost, ADD_HOST), -+ (host_view.AddHostBatch, ADD_HOST_BATCH), -+ (host_view.DeleteHost, DELETE_HOST), -+ (host_view.UpdateHost, UPDATE_HOST), -+ (host_view.GetHost, QUERY_HOST), -+ (host_view.GetHostInfo, QUERY_HOST_DETAIL), -+ (host_view.GetHostCount, GET_HOST_COUNT), -+ (host_view.GetHostTemplateFile, GET_HOST_TEMPLATE_FILE), -+ ], -+ "HOST_GROUP_URLS": [ -+ (host_view.AddHostGroup, ADD_GROUP), -+ (host_view.DeleteHostGroup, DELETE_GROUP), -+ (host_view.GetHostGroup, GET_GROUP), -+ ], -+ "CONFIG_URLS": [ -+ (config_view.CollectConfig, COLLECT_CONFIG), -+ (config_view.SyncConfig, SYNC_CONFIG), -+ (config_view.ObjectFileConfig, OBJECT_FILE_CONFIG) -+ ], -+ 'AGENT_URLS': [ -+ (agent_view.AgentPluginInfo, AGENT_PLUGIN_INFO), -+ (agent_view.SetAgentPluginStatus, AGENT_PLUGIN_SET), -+ (agent_view.SetAgentMetricStatus, AGENT_METRIC_SET), -+ (agent_view.GetHostScene, HOST_SCENE_GET), -+ ], -+ 'CVE_URLS': [ -+ (vulnerability_view.ExecuteRepoSetTask, EXECUTE_REPO_SET), -+ (vulnerability_view.ExecuteCveScanTask, EXECUTE_CVE_SCAN), -+ (vulnerability_view.ExecuteCveFixTask, EXECUTE_CVE_FIX), -+ (vulnerability_view.ExecuteCveRollbackTask, EXECUTE_CVE_ROLLBACK), -+ ], -+ 'METRIC': [ -+ (metric_view.QueryHostMetricNames, QUERY_METRIC_NAMES), -+ (metric_view.QueryHostMetricData, QUERY_METRIC_DATA), -+ (metric_view.QueryHostMetricList, QUERY_METRIC_LIST), -+ ], -+} -+ -+for _, value in SPECIFIC_URLS.items(): -+ URLS.extend(value) --- -Gitee - - -From bf654cd0d5086b29ab3e5b27cdc42cc0f8cc24ed Mon Sep 17 00:00:00 2001 -From: liulei <450962@qq.com> -Date: Tue, 31 Oct 2023 10:29:27 +0800 -Subject: [PATCH 2/2] Add an interface for querying file list -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - zeus/url.py | 4 +- - zeus/vulnerability_manage/url.py | 113 ------------------------------- - 2 files changed, 3 insertions(+), 114 deletions(-) - delete mode 100644 zeus/vulnerability_manage/url.py - -diff --git a/zeus/url.py b/zeus/url.py -index 597dcc7..fe464ac 100644 ---- a/zeus/url.py -+++ b/zeus/url.py -@@ -50,6 +50,7 @@ from zeus.conf.constant import ( - UPDATE_HOST, - USER_LOGIN, - SYNC_CONFIG, -+ OBJECT_FILE_CONFIG - ) - from zeus.config_manager import view as config_view - from zeus.host_manager import view as host_view -@@ -86,7 +87,8 @@ SPECIFIC_URLS = { - ], - "CONFIG_URLS": [ - (config_view.CollectConfig, COLLECT_CONFIG), -- (config_view.SyncConfig, SYNC_CONFIG) -+ (config_view.SyncConfig, SYNC_CONFIG), -+ (config_view.ObjectFileConfig, OBJECT_FILE_CONFIG) - ], - 'AGENT_URLS': [ - (agent_view.AgentPluginInfo, AGENT_PLUGIN_INFO), -diff --git a/zeus/vulnerability_manage/url.py b/zeus/vulnerability_manage/url.py -deleted file mode 100644 -index fe464ac..0000000 ---- a/zeus/vulnerability_manage/url.py -+++ /dev/null -@@ -1,113 +0,0 @@ --#!/usr/bin/python3 --# ****************************************************************************** --# Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. --# licensed under the Mulan PSL v2. --# You can use this software according to the terms and conditions of the Mulan PSL v2. --# You may obtain a copy of Mulan PSL v2 at: --# http://license.coscl.org.cn/MulanPSL2 --# THIS SOFTWARE IS PROVIDED ON AN 'AS IS' BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR --# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR --# PURPOSE. --# See the Mulan PSL v2 for more details. --# ******************************************************************************/ --""" --Time: --Author: --Description: url set --""" --from zeus.account_manager import view as account_view --from zeus.agent_manager import view as agent_view --from zeus.conf.constant import ( -- ADD_GROUP, -- ADD_HOST, -- ADD_HOST_BATCH, -- ADD_USER, -- AGENT_METRIC_SET, -- AGENT_PLUGIN_INFO, -- AGENT_PLUGIN_SET, -- AUTH_REDIRECT_URL, -- BIND_AUTH_ACCOUNT, -- CHANGE_PASSWORD, -- COLLECT_CONFIG, -- DELETE_GROUP, -- DELETE_HOST, -- EXECUTE_CVE_FIX, -- EXECUTE_CVE_ROLLBACK, -- EXECUTE_CVE_SCAN, -- EXECUTE_REPO_SET, -- GET_GROUP, -- GET_HOST_COUNT, -- GET_HOST_TEMPLATE_FILE, -- GITEE_AUTH_LOGIN, -- HOST_SCENE_GET, -- LOGOUT, -- QUERY_HOST, -- QUERY_HOST_DETAIL, -- QUERY_METRIC_DATA, -- QUERY_METRIC_LIST, -- QUERY_METRIC_NAMES, -- REFRESH_TOKEN, -- UPDATE_HOST, -- USER_LOGIN, -- SYNC_CONFIG, -- OBJECT_FILE_CONFIG --) --from zeus.config_manager import view as config_view --from zeus.host_manager import view as host_view --from zeus.metric_manager import view as metric_view --from zeus.vulnerability_manage import view as vulnerability_view -- --URLS = [] -- --SPECIFIC_URLS = { -- "ACCOUNT_URLS": [ -- (account_view.Login, USER_LOGIN), -- (account_view.ChangePassword, CHANGE_PASSWORD), -- (account_view.AddUser, ADD_USER), -- (account_view.GiteeAuthLogin, GITEE_AUTH_LOGIN), -- (account_view.AuthRedirectUrl, AUTH_REDIRECT_URL), -- (account_view.BindAuthAccount, BIND_AUTH_ACCOUNT), -- (account_view.RefreshToken, REFRESH_TOKEN), -- (account_view.Logout, LOGOUT), -- ], -- "HOST_URLS": [ -- (host_view.AddHost, ADD_HOST), -- (host_view.AddHostBatch, ADD_HOST_BATCH), -- (host_view.DeleteHost, DELETE_HOST), -- (host_view.UpdateHost, UPDATE_HOST), -- (host_view.GetHost, QUERY_HOST), -- (host_view.GetHostInfo, QUERY_HOST_DETAIL), -- (host_view.GetHostCount, GET_HOST_COUNT), -- (host_view.GetHostTemplateFile, GET_HOST_TEMPLATE_FILE), -- ], -- "HOST_GROUP_URLS": [ -- (host_view.AddHostGroup, ADD_GROUP), -- (host_view.DeleteHostGroup, DELETE_GROUP), -- (host_view.GetHostGroup, GET_GROUP), -- ], -- "CONFIG_URLS": [ -- (config_view.CollectConfig, COLLECT_CONFIG), -- (config_view.SyncConfig, SYNC_CONFIG), -- (config_view.ObjectFileConfig, OBJECT_FILE_CONFIG) -- ], -- 'AGENT_URLS': [ -- (agent_view.AgentPluginInfo, AGENT_PLUGIN_INFO), -- (agent_view.SetAgentPluginStatus, AGENT_PLUGIN_SET), -- (agent_view.SetAgentMetricStatus, AGENT_METRIC_SET), -- (agent_view.GetHostScene, HOST_SCENE_GET), -- ], -- 'CVE_URLS': [ -- (vulnerability_view.ExecuteRepoSetTask, EXECUTE_REPO_SET), -- (vulnerability_view.ExecuteCveScanTask, EXECUTE_CVE_SCAN), -- (vulnerability_view.ExecuteCveFixTask, EXECUTE_CVE_FIX), -- (vulnerability_view.ExecuteCveRollbackTask, EXECUTE_CVE_ROLLBACK), -- ], -- 'METRIC': [ -- (metric_view.QueryHostMetricNames, QUERY_METRIC_NAMES), -- (metric_view.QueryHostMetricData, QUERY_METRIC_DATA), -- (metric_view.QueryHostMetricList, QUERY_METRIC_LIST), -- ], --} -- --for _, value in SPECIFIC_URLS.items(): -- URLS.extend(value) --- -Gitee - diff --git a/0008-bugfix-email-config-does-not-take-effect.patch b/0008-bugfix-email-config-does-not-take-effect.patch deleted file mode 100644 index e11149d973c9430334ddd11404d42ff5bb211e21..0000000000000000000000000000000000000000 --- a/0008-bugfix-email-config-does-not-take-effect.patch +++ /dev/null @@ -1,75 +0,0 @@ -From 2ccba1565c7d2ad5e4bb821f05f09a3b63edbd8b Mon Sep 17 00:00:00 2001 -From: rabbitali -Date: Tue, 31 Oct 2023 18:03:40 +0800 -Subject: [PATCH] bugfix: email config does not take effect - ---- - zeus/vulnerability_manage/view.py | 31 ++++++++++++++++++------------- - 1 file changed, 18 insertions(+), 13 deletions(-) - -diff --git a/zeus/vulnerability_manage/view.py b/zeus/vulnerability_manage/view.py -index c56f672..34a33c9 100644 ---- a/zeus/vulnerability_manage/view.py -+++ b/zeus/vulnerability_manage/view.py -@@ -15,7 +15,7 @@ import time - import threading - from typing import Dict, Tuple - --from flask import Response -+from flask import Response, request - import sqlalchemy - import gevent - -@@ -301,14 +301,13 @@ class ExecuteCveScanTask(BaseResponse, BaseExcuteTask): - you can turn it off by modifying email config configuration in aops-private-config.ini, but it will still be - triggered during scheduled cve scan. - """ -- if configuration.email.get("ENABLED") or self._header.get("exempt_authentication"): -- self.get_response( -- "post", -- f'http://{configuration.apollo.get("IP")}:{ configuration.apollo.get("PORT")}{VUL_TASK_CVE_SCAN_NOTICE}', -- {}, -- self._header, -- timeout=10, -- ) -+ self.get_response( -+ "post", -+ f'http://{configuration.apollo.get("IP")}:{ configuration.apollo.get("PORT")}{VUL_TASK_CVE_SCAN_NOTICE}', -+ {}, -+ self._header, -+ timeout=10, -+ ) - - @BaseResponse.handle(schema=CveScanSchema) - def post(self, **params) -> Response: -@@ -330,6 +329,13 @@ class ExecuteCveScanTask(BaseResponse, BaseExcuteTask): - Returns: - response body - """ -+ -+ def execute_task(host_infos, need_to_send_email): -+ gevent.joinall([gevent.spawn(self._execute_task, host) for host in host_infos]) -+ if need_to_send_email: -+ LOGGER.info("Plan to request the interface for sending emails") -+ self._execute_send_email() -+ - # Query host basic info from database - status_code, host_infos = query_host_basic_info(params.get('total_hosts'), params.get('username')) - if status_code != state.SUCCEED: -@@ -340,10 +346,9 @@ class ExecuteCveScanTask(BaseResponse, BaseExcuteTask): - self._task_id = params.get("task_id") - self._check_items = params.get('check_items') - # Execute task -- threading.Thread( -- target=lambda: gevent.joinall([gevent.spawn(self._execute_task, host) for host in host_infos.values()]) -- ).start() -- threading.Thread(target=self._execute_send_email).start() -+ need_to_send_email = request.headers.get("exempt_authentication") or configuration.email.get("ENABLED") -+ threading.Thread(target=execute_task, args=(host_infos.values(), need_to_send_email)).start() -+ - return self.response(code=state.SUCCEED) - - --- -Gitee - diff --git a/0009-fix-import-error.patch b/0009-fix-import-error.patch deleted file mode 100644 index 389fcfb47ae08099121aa870004ee7ebc16881ac..0000000000000000000000000000000000000000 --- a/0009-fix-import-error.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 1e49007ac150ef9d51f8e1feff106ebb22dd9e96 Mon Sep 17 00:00:00 2001 -From: rabbitali -Date: Sat, 4 Nov 2023 00:28:30 +0800 -Subject: [PATCH] fix import error - ---- - zeus/config_manager/view.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/zeus/config_manager/view.py b/zeus/config_manager/view.py -index bde6dbf..b012c62 100644 ---- a/zeus/config_manager/view.py -+++ b/zeus/config_manager/view.py -@@ -22,7 +22,7 @@ from typing import List, Dict - from vulcanus.multi_thread_handler import MultiThreadHandler - from vulcanus.restful.resp import state - from vulcanus.restful.response import BaseResponse --from zeus.conf.constant import CERES_COLLECT_FILE, CERES_SYNC_CONF, OBJECT_FILE_CONF, CERES_OBJECT_FILE_CONF -+from zeus.conf.constant import CERES_COLLECT_FILE, CERES_SYNC_CONF, CERES_OBJECT_FILE_CONF - from zeus.database.proxy.host import HostProxy - from zeus.function.model import ClientConnectArgs - from zeus.function.verify.config import CollectConfigSchema, SyncConfigSchema, ObjectFileConfigSchema --- -2.33.0 - diff --git a/aops-zeus-v1.3.1.tar.gz b/aops-zeus-v1.4.0.tar.gz similarity index 47% rename from aops-zeus-v1.3.1.tar.gz rename to aops-zeus-v1.4.0.tar.gz index da95fe85b025d16ed980909ec8644da992876a23..faf51406574dfc4d7d5e3cb2d9730b0e713c2458 100644 Binary files a/aops-zeus-v1.3.1.tar.gz and b/aops-zeus-v1.4.0.tar.gz differ diff --git a/aops-zeus.spec b/aops-zeus.spec index d8d921cc2208dd16c6fd633d187c14701b31c9e7..0e537e43f05d03c6996e6611ab553f9944255ded 100644 --- a/aops-zeus.spec +++ b/aops-zeus.spec @@ -1,18 +1,10 @@ Name: aops-zeus -Version: v1.3.1 -Release: 5 +Version: v1.4.0 +Release: 1 Summary: A host and user manager service which is the foundation of aops. License: MulanPSL2 URL: https://gitee.com/openeuler/%{name} Source0: %{name}-%{version}.tar.gz -Patch0001: 0001-fix-metric-proxy-init-failed-error.patch -Patch0002: 0002-add-key-authentication-for-add-host-api.patch -Patch0004: 0004-update-the-template-file-contents-for-adding-hosts.patch -Patch0005: 0005-bugfix-update-host-api-request-error.patch -Patch0006: 0006-optimize-import.patch -Patch0007: 0007-add-an-api-for-querying-file-list.patch -Patch0008: 0008-bugfix-email-config-does-not-take-effect.patch -Patch0009: 0009-fix-import-error.patch BuildRequires: python3-setuptools @@ -29,7 +21,7 @@ A host and user manager service which is the foundation of aops. %prep -%autosetup -n %{name}-%{version} -p1 +%autosetup -n %{name}-%{version} # build for aops-zeus @@ -53,6 +45,9 @@ cp -r database %{buildroot}/opt/aops/ %changelog +* Tue Dec 12 2023 wenxin - v1.4.0-1 +- Change CVE rollback task to hotpatch remove + * Mon Nov 06 2023 wenxin - v1.3.1-5 - Bugfix: email config does not take effect - Add an interface for querying file list