147 lines
6.1 KiB
Diff
147 lines
6.1 KiB
Diff
|
|
From 5b38d0362e73afd8a3cd16fdd1e32dfd7cde00ba Mon Sep 17 00:00:00 2001
|
||
|
|
From: xuezhixin <xuezhixin@uniontech.com>
|
||
|
|
Date: Mon, 13 Nov 2023 10:45:29 +0800
|
||
|
|
Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0ELF=E5=AF=B9=E6=AF=94?=
|
||
|
|
=?UTF-8?q?=E5=87=BD=E6=95=B0?=
|
||
|
|
MIME-Version: 1.0
|
||
|
|
Content-Type: text/plain; charset=UTF-8
|
||
|
|
Content-Transfer-Encoding: 8bit
|
||
|
|
|
||
|
|
---
|
||
|
|
sysmig_agent/Abisystmcompchk.py | 107 +++++++++++++++++++++++++++++++-
|
||
|
|
1 file changed, 106 insertions(+), 1 deletion(-)
|
||
|
|
|
||
|
|
diff --git a/sysmig_agent/Abisystmcompchk.py b/sysmig_agent/Abisystmcompchk.py
|
||
|
|
index 14cad1d..d3c09e6 100644
|
||
|
|
--- a/sysmig_agent/Abisystmcompchk.py
|
||
|
|
+++ b/sysmig_agent/Abisystmcompchk.py
|
||
|
|
@@ -322,6 +322,7 @@ def get_system_pkg_name(flag, mig_logger):
|
||
|
|
return False
|
||
|
|
|
||
|
|
|
||
|
|
+
|
||
|
|
class myThread (threading.Thread):
|
||
|
|
def __init__(self, threadID, name, q, lock, fpw, fpr, q_query, log):
|
||
|
|
threading.Thread.__init__(self)
|
||
|
|
@@ -338,7 +339,6 @@ class myThread (threading.Thread):
|
||
|
|
process_data(self.name, self.q, self.lock, self.fpw, self.fpr, self.q_query, self.log)
|
||
|
|
self.log.info ("Exit the thread" + self.name)
|
||
|
|
|
||
|
|
-
|
||
|
|
def is_binwary_file(filename):
|
||
|
|
TEXT_BOMS = {
|
||
|
|
codecs.BOM_UTF16_BE,
|
||
|
|
@@ -352,3 +352,108 @@ def is_binwary_file(filename):
|
||
|
|
initial_bytes = file.read(CHUNKSIZE)
|
||
|
|
file.close
|
||
|
|
return not any(initial_bytes.startswith(bom) for bom in TEXT_BOMS) and b'\0' in initial_bytes
|
||
|
|
+
|
||
|
|
+def incomp_binwary_desc(binwary_file):
|
||
|
|
+ if binwary_file.endswith('.so'):
|
||
|
|
+ incomp_info_desc = '库差异'
|
||
|
|
+ elif binwary_file.endswith('.exec'):
|
||
|
|
+ incomp_info_desc = '可执行文件'
|
||
|
|
+ elif binwary_file.endswith('.mod'):
|
||
|
|
+ incomp_info_desc = '视频文件'
|
||
|
|
+ else:
|
||
|
|
+ incomp_info_desc = '二进制差异'
|
||
|
|
+ return incomp_info_desc
|
||
|
|
+
|
||
|
|
+def deal_files_list(fwincomp, fwcomp, cur_file_list, trn_file_list, rpm_full_pkg_name, list_log):
|
||
|
|
+ #compatiable
|
||
|
|
+ comp_flag=1
|
||
|
|
+ link_flag = '0'
|
||
|
|
+ cur_file_deal = ''
|
||
|
|
+
|
||
|
|
+ rpm_pkg_dir = local_dir + 'uos/rpms'
|
||
|
|
+ rpm_pkg_name = rpm_full_pkg_name.rsplit('-',2)[0]
|
||
|
|
+ pkg_version = rpm_full_pkg_name.rsplit('-',2)[1]
|
||
|
|
+
|
||
|
|
+ for cur_file_name in cur_file_list:
|
||
|
|
+
|
||
|
|
+ cur_file_binwary = cur_file_name.strip('\n')
|
||
|
|
+
|
||
|
|
+ if not os.path.exists(cur_file_binwary):
|
||
|
|
+ continue
|
||
|
|
+
|
||
|
|
+ if os.path.isdir(cur_file_binwary):
|
||
|
|
+ continue
|
||
|
|
+
|
||
|
|
+ if '.' in cur_file_binwary.rsplit('/',1)[1]:
|
||
|
|
+ if '.'+cur_file_binwary.rsplit('.',1)[1] in suffix_list:
|
||
|
|
+ continue
|
||
|
|
+
|
||
|
|
+ if not is_ELFfile(cur_file_binwary, list_log):
|
||
|
|
+ continue
|
||
|
|
+
|
||
|
|
+ if is_binwary_file(cur_file_binwary):
|
||
|
|
+ trn_file_deal = rpm_pkg_dir + cur_file_binwary
|
||
|
|
+ if not os.path.exists(trn_file_deal):
|
||
|
|
+ continue
|
||
|
|
+
|
||
|
|
+ #link file realpath
|
||
|
|
+ if os.path.islink(cur_file_binwary):
|
||
|
|
+ cur_file_deal = os.path.realpath(cur_file_binwary)
|
||
|
|
+ if cur_file_name in trn_file_list:
|
||
|
|
+ trn_file_deal_tmp = rpm_pkg_dir + cur_file_binwary
|
||
|
|
+ trn_file_deal = os.path.realpath(trn_file_deal_tmp)
|
||
|
|
+ link_flag = '1'
|
||
|
|
+ else:
|
||
|
|
+ continue
|
||
|
|
+ else:
|
||
|
|
+ if link_flag:
|
||
|
|
+ link_flag = '0'
|
||
|
|
+ continue
|
||
|
|
+ if cur_file_name in trn_file_list:
|
||
|
|
+ trn_file_deal = rpm_pkg_dir + cur_file_binwary
|
||
|
|
+ cur_file_deal = cur_file_binwary
|
||
|
|
+ else:
|
||
|
|
+ continue
|
||
|
|
+
|
||
|
|
+ abidiff_rst_list = list(os.popen('abidiff %s %s' %(trn_file_deal, cur_file_binwary)))
|
||
|
|
+ if len(abidiff_rst_list):
|
||
|
|
+ i = 0
|
||
|
|
+ if cur_file_binwary.endswith('.exec'):
|
||
|
|
+ while i < 2:
|
||
|
|
+ for line in abidiff_rst_list[i].split(':',1)[1].split(','):
|
||
|
|
+ if line.split(' ', 2)[1] != '0':
|
||
|
|
+ bin_name = cur_file_name.strip('\n').rsplit('/', 1)[1]
|
||
|
|
+ compatiablity='N'
|
||
|
|
+ incomp_reason = incomp_binwary_desc(bin_name)
|
||
|
|
+ diff_detail = abidiff_rst_list[i].split(':', 1)[1]
|
||
|
|
+ fwincomp.write(rpm_pkg_name+','+bin_name+','+pkg_version+','+compatiablity+','+incomp_reason+','+diff_detail)
|
||
|
|
+ comp_flag = 0
|
||
|
|
+ i = i + 1
|
||
|
|
+ #20220112 lihp: add if branch
|
||
|
|
+ elif abidiff_rst_list[0].startswith('ELF SONAME'):
|
||
|
|
+ i = i + 1
|
||
|
|
+ while i < 2:
|
||
|
|
+ for line in abidiff_rst_list[i].split(':',1)[1].split(','):
|
||
|
|
+ if line.split(' ', 2)[1] != '0':
|
||
|
|
+ bin_name = cur_file_name.strip('\n').rsplit('/', 1)[1]
|
||
|
|
+ compatiablity='N'
|
||
|
|
+ incomp_reason = incomp_binwary_desc(bin_name)
|
||
|
|
+ diff_detail = abidiff_rst_list[i].split(':', 1)[1]
|
||
|
|
+ fwincomp.write(rpm_pkg_name+','+bin_name+','+pkg_version+','+compatiablity+','+incomp_reason+','+diff_detail)
|
||
|
|
+ comp_flag = 0
|
||
|
|
+ i = i + 1
|
||
|
|
+ else:
|
||
|
|
+ while i < 4:
|
||
|
|
+ for line in abidiff_rst_list[i].split(':',1)[1].split(','):
|
||
|
|
+ if line.split(' ', 2)[1] != '0':
|
||
|
|
+ bin_name = cur_file_name.strip('\n').rsplit('/', 1)[1]
|
||
|
|
+ compatiablity='N'
|
||
|
|
+ incomp_reason = incomp_binwary_desc(bin_name)
|
||
|
|
+ diff_detail = abidiff_rst_list[i].split(':', 1)[1]
|
||
|
|
+ fwincomp.write(rpm_pkg_name+','+bin_name+','+pkg_version+','+compatiablity+','+incomp_reason+','+diff_detail)
|
||
|
|
+ comp_flag = 0
|
||
|
|
+ i = i + 1
|
||
|
|
+ else:
|
||
|
|
+ continue
|
||
|
|
+ if comp_flag:
|
||
|
|
+ fwcomp.write(rpm_pkg_name + ',' + ',' + ',' + 'Y,' + ',' + '\n')
|
||
|
|
\ No newline at end of file
|
||
|
|
--
|
||
|
|
2.20.1
|
||
|
|
|