gpo: Create base class gp_inf_ext
[nivanova/samba-autobuild/.git] / python / samba / gpclass.py
index 7f7392d80927b0aecf224021ddd6eeb9adbc4ed4..a4ff22b5e1359e712bd2fd3da5b156bdeeb83d01 100644 (file)
@@ -446,7 +446,53 @@ class inf_to_ldb(gp_ext_setter):
         return 'System Access'
 
 
-class gp_sec_ext(gp_ext):
+class gp_inf_ext(gp_ext):
+    @abstractmethod
+    def list(self, rootpath):
+        pass
+
+    @abstractmethod
+    def apply_map(self):
+        pass
+
+    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.ldb, self.gp_db, self.lp, att,
+                           value).update_samba()
+                    self.gp_db.commit()
+        return ret
+
+    @abstractmethod
+    def __str__(self):
+        pass
+
+class gp_sec_ext(gp_inf_ext):
     '''This class does the following two things:
         1) Identifies the GPO if it has a certain kind of filepath,
         2) Finally parses it.
@@ -492,36 +538,3 @@ class gp_sec_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.ldb, self.gp_db, self.lp, att,
-                           value).update_samba()
-                    self.gp_db.commit()
-        return ret
-