From: David Mulder Date: Thu, 17 May 2018 22:23:51 +0000 (-0600) Subject: gpo: Move policy application to the gp_ext X-Git-Tag: tdb-1.3.17~1414 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=78601b3516c495c87455732fec8c19c4d21e48f8;p=thirdparty%2Fsamba.git gpo: Move policy application to the gp_ext Policy specific setting application should be handled by the group policy extension, not the read/parse handler. Signed-off-by: David Mulder Reviewed-by: Douglas Bagnall Reviewed-by: Aurelien Aptel --- diff --git a/python/samba/gp_sec_ext.py b/python/samba/gp_sec_ext.py index 8fd2ff55723..256a39eab15 100644 --- a/python/samba/gp_sec_ext.py +++ b/python/samba/gp_sec_ext.py @@ -166,10 +166,24 @@ class gp_sec_ext(gp_inf_ext): if self.lp.get('server role') != 'active directory domain controller': return inf_file = 'MACHINE/Microsoft/Windows NT/SecEdit/GptTmpl.inf' + apply_map = self.apply_map() for gpo in changed_gpo_list: if gpo.file_sys_path: self.gp_db.set_guid(gpo.name) path = os.path.join(gpo.file_sys_path, inf_file) - self.parse(path) + inf_conf = self.parse(path) + if not inf_conf: + continue + for section in inf_conf.sections(): + current_section = apply_map.get(section) + if not current_section: + continue + for key, value in inf_conf.items(section): + if current_section.get(key): + (att, setter) = current_section.get(key) + value = value.encode('ascii', 'ignore') + setter(self.logger, self.gp_db, self.lp, + self.creds, att, value).update_samba() + self.gp_db.commit() diff --git a/python/samba/gpclass.py b/python/samba/gpclass.py index 1563db469ab..893a419cfbf 100644 --- a/python/samba/gpclass.py +++ b/python/samba/gpclass.py @@ -357,37 +357,13 @@ class gp_ext_setter(object): class gp_inf_ext(gp_ext): def read(self, policy): - ret = False - inftable = self.apply_map() - - current_section = None - - # So here we would declare a boolean, - # that would get changed to TRUE. - # - # If at any point in time a GPO was applied, - # then we return that boolean at the end. - inf_conf = ConfigParser() inf_conf.optionxform = str try: inf_conf.readfp(StringIO(policy)) except: inf_conf.readfp(StringIO(policy.decode('utf-16'))) - - for section in inf_conf.sections(): - current_section = inftable.get(section) - if not current_section: - continue - for key, value in inf_conf.items(section): - if current_section.get(key): - (att, setter) = current_section.get(key) - value = value.encode('ascii', 'ignore') - ret = True - setter(self.logger, self.gp_db, self.lp, - self.creds, att, value).update_samba() - self.gp_db.commit() - return ret + return inf_conf ''' Fetch the hostname of a writable DC '''