gpo: Apply Group Policy MOTD setting from VGP
authorDavid Mulder <dmulder@suse.com>
Wed, 17 Feb 2021 21:43:50 +0000 (14:43 -0700)
committerJeremy Allison <jra@samba.org>
Mon, 8 Mar 2021 19:45:30 +0000 (19:45 +0000)
Signed-off-by: David Mulder <dmulder@suse.com>
Reviewed-by: Jeremy Allison <jra@samba.org>
python/samba/vgp_motd_ext.py
selftest/knownfail.d/gpo [deleted file]
source4/scripting/bin/samba-gpupdate

index 1e45e8c73c5d5d70781729bd27ff7125f75cac8c..1ac152c29e936e2dbc163ebe836588f506f8e264 100644 (file)
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+import os
 from samba.gpclass import gp_xml_ext
 
 class vgp_motd_ext(gp_xml_ext):
+    def __str__(self):
+        return 'Unix Settings/Message of the Day'
+
     def process_group_policy(self, deleted_gpo_list, changed_gpo_list,
                              motd='/etc/motd'):
-        pass
+        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 == 'motd':
+                        with open(motd, 'w') as w:
+                            if msg:
+                                w.write(msg)
+                            else:
+                                w.truncate()
+                    self.gp_db.delete(str(self), attribute)
+            self.gp_db.commit()
+
+        for gpo in changed_gpo_list:
+            if gpo.file_sys_path:
+                self.gp_db.set_guid(gpo.name)
+                xml = 'MACHINE/VGP/VTLA/Unix/MOTD/manifest.xml'
+                path = os.path.join(gpo.file_sys_path, xml)
+                xml_conf = self.parse(path)
+                if not xml_conf:
+                    continue
+                policy = xml_conf.find('policysetting')
+                data = policy.find('data')
+                text = data.find('text')
+                current = open(motd, 'r').read() if os.path.exists(motd) else ''
+                if current != text.text:
+                    with open(motd, 'w') as w:
+                        w.write(text.text)
+                        self.gp_db.store(str(self), 'motd', current)
+                    self.gp_db.commit()
 
     def rsop(self, gpo):
         output = {}
+        if gpo.file_sys_path:
+            xml = 'MACHINE/VGP/VTLA/Unix/MOTD/manifest.xml'
+            path = os.path.join(gpo.file_sys_path, xml)
+            xml_conf = self.parse(path)
+            if not xml_conf:
+                return output
+            policy = xml_conf.find('policysetting')
+            data = policy.find('data')
+            filename = data.find('filename')
+            text = data.find('text')
+            mfile = os.path.join('/etc', filename.text)
+            output[mfile] = text.text
         return output
diff --git a/selftest/knownfail.d/gpo b/selftest/knownfail.d/gpo
deleted file mode 100644 (file)
index d16587d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-^samba.tests.gpo.samba.tests.gpo.GPOTests.test_vgp_motd
index 52de59fe3d95c601b951549681cc762042deaf8c..d5903a2e5e063b3e6ffe6ea282b6613f7647e64c 100755 (executable)
@@ -40,6 +40,7 @@ from samba.gp_msgs_ext import gp_msgs_ext
 from samba.vgp_symlink_ext import vgp_symlink_ext
 from samba.vgp_files_ext import vgp_files_ext
 from samba.vgp_openssh_ext import vgp_openssh_ext
+from samba.vgp_motd_ext import vgp_motd_ext
 import logging
 
 if __name__ == "__main__":
@@ -99,6 +100,7 @@ if __name__ == "__main__":
         gp_extensions.append(vgp_symlink_ext)
         gp_extensions.append(vgp_files_ext)
         gp_extensions.append(vgp_openssh_ext)
+        gp_extensions.append(vgp_motd_ext)
         gp_extensions.extend(machine_exts)
     elif opts.target == 'User':
         gp_extensions.extend(user_exts)