1a6a784faSopenharmony_ci#!/usr/bin/env python 2a6a784faSopenharmony_ci# -*- coding: utf-8 -*- 3a6a784faSopenharmony_ci# Copyright (c) 2023 Huawei Device Co., Ltd. 4a6a784faSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 5a6a784faSopenharmony_ci# you may not use this file except in compliance with the License. 6a6a784faSopenharmony_ci# You may obtain a copy of the License at 7a6a784faSopenharmony_ci# 8a6a784faSopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 9a6a784faSopenharmony_ci# 10a6a784faSopenharmony_ci# Unless required by applicable law or agreed to in writing, software 11a6a784faSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 12a6a784faSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a6a784faSopenharmony_ci# See the License for the specific language governing permissions and 14a6a784faSopenharmony_ci# limitations under the License. 15a6a784faSopenharmony_ci 16a6a784faSopenharmony_ciimport tarfile 17a6a784faSopenharmony_ciimport argparse 18a6a784faSopenharmony_ciimport os 19a6a784faSopenharmony_ciimport subprocess 20a6a784faSopenharmony_ciimport sys 21a6a784faSopenharmony_ciimport shutil 22a6a784faSopenharmony_ci 23a6a784faSopenharmony_ci 24a6a784faSopenharmony_cidef untar_file(tar_file_path, extract_path): 25a6a784faSopenharmony_ci try: 26a6a784faSopenharmony_ci tar_cmd = ['tar', '-zxf', tar_file_path, '-C', extract_path] 27a6a784faSopenharmony_ci subprocess.run(tar_cmd, check=True) 28a6a784faSopenharmony_ci except Exception as e: 29a6a784faSopenharmony_ci print("tar error!") 30a6a784faSopenharmony_ci return 31a6a784faSopenharmony_ci 32a6a784faSopenharmony_cidef copy_file(dir): 33a6a784faSopenharmony_ci src_name = '/mime.convs.in' 34a6a784faSopenharmony_ci dest_name = '/mime.convs' 35a6a784faSopenharmony_ci src_file = dir + src_name 36a6a784faSopenharmony_ci dest_file = dir + dest_name 37a6a784faSopenharmony_ci print(f'copy from %s to %s', src_file, dest_file) 38a6a784faSopenharmony_ci shutil.copy2(src_file, dest_file) 39a6a784faSopenharmony_ci 40a6a784faSopenharmony_cidef move_file(src_path, dst_path): 41a6a784faSopenharmony_ci files = [ 42a6a784faSopenharmony_ci "ohos_ip_conflict.patch", 43a6a784faSopenharmony_ci "backport-CVE-2022-26691.patch", 44a6a784faSopenharmony_ci "backport-CVE-2023-32324.patch", 45a6a784faSopenharmony_ci "backport-CVE-2023-34241.patch", 46a6a784faSopenharmony_ci "ohos-multi-file-print.patch", 47a6a784faSopenharmony_ci "ohos-modify-pthread.patch", 48a6a784faSopenharmony_ci "ohos-add-openssl.patch", 49a6a784faSopenharmony_ci "backport-CVE-2023-4504.patch", 50a6a784faSopenharmony_ci "backport-CVE-2024-35235.patch", 51a6a784faSopenharmony_ci "ohos-usb-manager.patch", 52a6a784faSopenharmony_ci "ohos-usb-print.patch", 53a6a784faSopenharmony_ci "config.h" 54a6a784faSopenharmony_ci ] 55a6a784faSopenharmony_ci for file in files: 56a6a784faSopenharmony_ci src_file = os.path.join(src_path, file) 57a6a784faSopenharmony_ci dst_file = os.path.join(dst_path, file) 58a6a784faSopenharmony_ci shutil.copy(src_file, dst_file) 59a6a784faSopenharmony_ci 60a6a784faSopenharmony_ci 61a6a784faSopenharmony_cidef apply_patch(patch_file, target_dir): 62a6a784faSopenharmony_ci try: 63a6a784faSopenharmony_ci if not os.path.exists(target_dir): 64a6a784faSopenharmony_ci return 65a6a784faSopenharmony_ci patch_cmd = ['patch', '-p1', "--fuzz=0", "--no-backup-if-mismatch", '-i', patch_file, '-d', target_dir] 66a6a784faSopenharmony_ci subprocess.run(patch_cmd, check=True) 67a6a784faSopenharmony_ci except Exception as e: 68a6a784faSopenharmony_ci print("apply_patch error!") 69a6a784faSopenharmony_ci return 70a6a784faSopenharmony_ci 71a6a784faSopenharmony_ci 72a6a784faSopenharmony_cidef do_patch(target_dir): 73a6a784faSopenharmony_ci patch_file = [ 74a6a784faSopenharmony_ci "backport-CVE-2022-26691.patch", 75a6a784faSopenharmony_ci "backport-CVE-2023-32324.patch", 76a6a784faSopenharmony_ci "backport-CVE-2023-34241.patch", 77a6a784faSopenharmony_ci "ohos-multi-file-print.patch", 78a6a784faSopenharmony_ci "ohos-modify-pthread.patch", 79a6a784faSopenharmony_ci "ohos-add-openssl.patch", 80a6a784faSopenharmony_ci "backport-CVE-2023-4504.patch", 81a6a784faSopenharmony_ci "backport-CVE-2024-35235.patch", 82a6a784faSopenharmony_ci "ohos_ip_conflict.patch", 83a6a784faSopenharmony_ci "ohos-usb-manager.patch", 84a6a784faSopenharmony_ci "ohos-usb-print.patch" 85a6a784faSopenharmony_ci ] 86a6a784faSopenharmony_ci 87a6a784faSopenharmony_ci for patch in patch_file: 88a6a784faSopenharmony_ci apply_patch(patch, target_dir) 89a6a784faSopenharmony_ci 90a6a784faSopenharmony_ci 91a6a784faSopenharmony_cidef main(): 92a6a784faSopenharmony_ci cups_path = argparse.ArgumentParser() 93a6a784faSopenharmony_ci cups_path.add_argument('--gen-dir', help='generate path of log', required=True) 94a6a784faSopenharmony_ci cups_path.add_argument('--source-dir', help='generate path of log', required=True) 95a6a784faSopenharmony_ci args = cups_path.parse_args() 96a6a784faSopenharmony_ci tar_file_path = os.path.join(args.source_dir, "cups-2.4.0-source.tar.gz") 97a6a784faSopenharmony_ci target_dir = os.path.join(args.gen_dir, "cups-2.4.0") 98a6a784faSopenharmony_ci convs_dir = os.path.join(target_dir, "conf") 99a6a784faSopenharmony_ci 100a6a784faSopenharmony_ci untar_file(tar_file_path, args.gen_dir) 101a6a784faSopenharmony_ci move_file(args.source_dir, target_dir) 102a6a784faSopenharmony_ci do_patch(target_dir) 103a6a784faSopenharmony_ci copy_file(convs_dir) 104a6a784faSopenharmony_ci return 0 105a6a784faSopenharmony_ci 106a6a784faSopenharmony_ciif __name__ == '__main__': 107a6a784faSopenharmony_ci sys.exit(main()) 108