[Pkg-libvirt-commits] [libguestfs] 45/63: appliance: daemon: import and use upstream shadow lens

Hilko Bengen bengen at moszumanska.debian.org
Fri Oct 3 14:43:30 UTC 2014


This is an automated email from the git hooks/post-receive script.

bengen pushed a commit to annotated tag debian/1%1.27.39-1
in repository libguestfs.

commit 61917136f5ad5efe30502f46f1adf60c20f15c97
Author: Pino Toscano <ptoscano at redhat.com>
Date:   Thu Sep 4 15:27:37 2014 +0200

    appliance: daemon: import and use upstream shadow lens
    
    Import the upstream lens for the shadow file, just with a different
    identifier and not matching /etc/shadow by default. Instead, apply a
    transformation to have it match /etc/shadow only if the version of
    augeas is at least 1.2.1 [1].
    
    [1] While the last upstream version is 1.2.0, all the development seems
    to happen in master, so whatever the next version is going to be
    numbered (e.g. 1.2.1 or 1.3.0), the check will be fine anyway.
---
 appliance/Makefile.am        |  3 +-
 appliance/guestfs_shadow.aug | 72 ++++++++++++++++++++++++++++++++++++++++++++
 daemon/augeas.c              | 21 ++++++++++++-
 3 files changed, 94 insertions(+), 2 deletions(-)

diff --git a/appliance/Makefile.am b/appliance/Makefile.am
index bb0c0e8..b8377af 100644
--- a/appliance/Makefile.am
+++ b/appliance/Makefile.am
@@ -75,13 +75,14 @@ packagelist: packagelist.in Makefile
 	cmp -s $@ $@-t || mv $@-t $@
 	rm -f $@-t
 
-supermin.d/daemon.tar.gz: ../daemon/guestfsd guestfsd.suppressions guestfs_lvm_conf.aug
+supermin.d/daemon.tar.gz: ../daemon/guestfsd guestfsd.suppressions guestfs_lvm_conf.aug guestfs_shadow.aug
 	rm -f $@ $@-t
 	rm -rf tmp-d
 	mkdir -p tmp-d$(DAEMON_SUPERMIN_DIR) tmp-d/etc tmp-d/usr/share/guestfs
 	ln ../daemon/guestfsd tmp-d$(DAEMON_SUPERMIN_DIR)/guestfsd
 	ln $(srcdir)/guestfsd.suppressions tmp-d/etc/guestfsd.suppressions
 	ln $(srcdir)/guestfs_lvm_conf.aug tmp-d/usr/share/guestfs/guestfs_lvm_conf.aug
+	ln $(srcdir)/guestfs_shadow.aug tmp-d/usr/share/guestfs/guestfs_shadow.aug
 	( cd tmp-d && tar zcf - * ) > $@-t
 	rm -r tmp-d
 	mv $@-t $@
diff --git a/appliance/guestfs_shadow.aug b/appliance/guestfs_shadow.aug
new file mode 100644
index 0000000..2fbf455
--- /dev/null
+++ b/appliance/guestfs_shadow.aug
@@ -0,0 +1,72 @@
+(*
+ Module: Shadow
+ Parses /etc/shadow
+
+ Author: Lorenzo M. Catucci <catucci at ccd.uniroma2.it>
+
+ Original Author: Free Ekanayaka <free at 64studio.com>
+
+ About: Reference
+
+   - man 5 shadow
+   - man 3 getspnam
+
+ About: License
+   This file is licensed under the LGPL v2+, like the rest of Augeas.
+
+ About:
+
+ Each line in the shadow files represents the additional shadow-defined attributes
+ for the corresponding user, as defined in the passwd file.
+
+*)
+
+module Guestfs_Shadow =
+
+   autoload xfm
+
+(************************************************************************
+ *                           USEFUL PRIMITIVES
+ *************************************************************************)
+
+let eol        = Util.eol
+let comment    = Util.comment
+let empty      = Util.empty
+let dels       = Util.del_str
+
+let colon      = Sep.colon
+
+let word       = Rx.word
+let integer    = Rx.integer
+
+let sto_to_col = Passwd.sto_to_col
+let sto_to_eol = Passwd.sto_to_eol
+
+(************************************************************************
+ * Group:                        ENTRIES
+ *************************************************************************)
+
+(* View: entry *)
+let entry   = [ key word
+                . colon
+                . [ label "password"          . sto_to_col?    . colon ]
+                . [ label "lastchange_date"   . store integer? . colon ]
+                . [ label "minage_days"       . store integer? . colon ]
+                . [ label "maxage_days"       . store integer? . colon ]
+                . [ label "warn_days"         . store integer? . colon ]
+                . [ label "inactive_days"     . store integer? . colon ]
+                . [ label "expire_date"       . store integer? . colon ]
+                . [ label "flag"              . store integer? ]
+                . eol ]
+
+(************************************************************************
+ *                                LENS
+ *************************************************************************)
+
+let lns        = (comment|empty|entry) *
+
+let filter
+               = incl "/shadow"
+               . Util.stdexcl
+
+let xfm        = transform lns filter
diff --git a/daemon/augeas.c b/daemon/augeas.c
index 9c8bbcc..ce49726 100644
--- a/daemon/augeas.c
+++ b/daemon/augeas.c
@@ -134,7 +134,7 @@ do_aug_init (const char *root, int flags)
   }
 
   /* Pass AUG_NO_ERR_CLOSE so we can display detailed errors. */
-  aug = aug_init (buf, NULL, flags | AUG_NO_ERR_CLOSE);
+  aug = aug_init (buf, "/usr/share/guestfs/", flags | AUG_NO_ERR_CLOSE);
 
   if (!aug) {
     reply_with_error ("augeas initialization failed");
@@ -148,6 +148,25 @@ do_aug_init (const char *root, int flags)
     return -1;
   }
 
+  if (!augeas_is_version (1, 2, 1)) {
+    int r = aug_transform (aug, "guestfs_shadow", "/etc/shadow",
+                           0 /* = included */);
+    if (r == -1) {
+      AUGEAS_ERROR ("aug_transform");
+      aug_close (aug);
+      aug = NULL;
+      return -1;
+    }
+
+    /* If aug_load was implicitly called, reload the handle. */
+    if ((flags & AUG_NO_LOAD) == 0) {
+      if (aug_load (aug) == -1) {
+        AUGEAS_ERROR ("aug_load");
+        return -1;
+      }
+    }
+  }
+
   return 0;
 }
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-libvirt/libguestfs.git



More information about the Pkg-libvirt-commits mailing list