From: David Mulder Date: Tue, 10 Jan 2023 00:12:53 +0000 (-0700) Subject: gp: Ensure Issue policy preforms proper cleanup X-Git-Tag: tevent-0.16.0~1313 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8bdb1b65332342da4d28af3b9d9fbcfca15a869e;p=thirdparty%2Fsamba.git gp: Ensure Issue policy preforms proper cleanup Signed-off-by: David Mulder Reviewed-by: Douglas Bagnall Reviewed-by: Andrew Bartlett --- diff --git a/python/samba/gp/vgp_issue_ext.py b/python/samba/gp/vgp_issue_ext.py index c622fa094b6..10d4ea0f77f 100644 --- a/python/samba/gp/vgp_issue_ext.py +++ b/python/samba/gp/vgp_issue_ext.py @@ -15,30 +15,46 @@ # along with this program. If not, see . import os -from samba.gp.gpclass import gp_xml_ext +from samba.gp.gpclass import gp_xml_ext, gp_misc_applier + +class vgp_issue_ext(gp_xml_ext, gp_misc_applier): + def unapply(self, guid, issue, attribute, value): + if attribute != 'issue': + raise ValueError('"%s" is not a message attribute' % attribute) + msg = value + data = self.parse_value(value) + current = open(issue, 'r').read() if os.path.exists(issue) else '' + # Only overwrite the msg if it hasn't been modified. It may have been + # modified by another GPO. + if 'new_val' not in data or current.strip() == data['new_val'].strip(): + msg = data['old_val'] + with open(issue, 'w') as w: + if msg: + w.write(msg) + else: + w.truncate() + self.cache_remove_attribute(guid, attribute) + + def apply(self, guid, issue, text): + current = open(issue, 'r').read() if os.path.exists(issue) else '' + if current != text.text: + with open(issue, 'w') as w: + w.write(text.text) + data = self.generate_value(old_val=current, new_val=text.text) + self.cache_add_attribute(guid, 'issue', data) -class vgp_issue_ext(gp_xml_ext): def __str__(self): return 'Unix Settings/Issue' def process_group_policy(self, deleted_gpo_list, changed_gpo_list, issue='/etc/issue'): for guid, settings in deleted_gpo_list: - self.gp_db.set_guid(guid) if str(self) in settings: for attribute, msg in settings[str(self)].items(): - if attribute == 'issue': - with open(issue, 'w') as w: - if msg: - w.write(msg) - else: - w.truncate() - self.gp_db.delete(str(self), attribute) - self.gp_db.commit() + self.unapply(guid, issue, attribute, msg) for gpo in changed_gpo_list: if gpo.file_sys_path: - self.gp_db.set_guid(gpo.name) xml = 'MACHINE/VGP/VTLA/Unix/Issue/manifest.xml' path = os.path.join(gpo.file_sys_path, xml) xml_conf = self.parse(path) @@ -47,12 +63,7 @@ class vgp_issue_ext(gp_xml_ext): policy = xml_conf.find('policysetting') data = policy.find('data') text = data.find('text') - current = open(issue, 'r').read() if os.path.exists(issue) else '' - if current != text.text: - with open(issue, 'w') as w: - w.write(text.text) - self.gp_db.store(str(self), 'issue', current) - self.gp_db.commit() + self.apply(gpo.name, issue, text) def rsop(self, gpo): output = {} diff --git a/selftest/knownfail.d/gpo b/selftest/knownfail.d/gpo index 11d97f3ebbc..3d08aa883a4 100644 --- a/selftest/knownfail.d/gpo +++ b/selftest/knownfail.d/gpo @@ -1,5 +1,4 @@ ^samba.tests.gpo.samba.tests.gpo.GPOTests.test_vgp_motd -^samba.tests.gpo.samba.tests.gpo.GPOTests.test_vgp_issue ^samba.tests.gpo.samba.tests.gpo.GPOTests.test_smb_conf_ext ^samba.tests.gpo.samba.tests.gpo.GPOTests.test_gp_user_scripts_ext ^samba.tests.gpo.samba.tests.gpo.GPOTests.test_gp_user_centrify_crontab_ext