Hello community,
here is the log from the commit of package snapper for openSUSE:Factory checked in at 2014-03-06 19:18:14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/snapper (Old)
and /work/SRC/openSUSE:Factory/.snapper.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "snapper"
Changes:
--------
--- /work/SRC/openSUSE:Factory/snapper/snapper.changes 2014-02-21 19:43:24.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.snapper.new/snapper.changes 2014-03-06 19:18:16.000000000 +0100
@@ -1,0 +2,10 @@
+Mon Mar 03 17:20:41 CET 2014 - aschnell@suse.de
+
+- fixed empty-pre-post cleanup algorithm
+
+-------------------------------------------------------------------
+Fri Feb 28 11:47:22 CET 2014 - aschnell@suse.de
+
+- fixed setting setuid bit during undochange (bnc#862964)
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ snapper-0.2.1.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.2.1/client/cleanup.cc new/snapper-0.2.1/client/cleanup.cc
--- old/snapper-0.2.1/client/cleanup.cc 2014-01-29 16:48:30.000000000 +0100
+++ new/snapper-0.2.1/client/cleanup.cc 2014-03-03 17:32:41.000000000 +0100
@@ -362,6 +362,8 @@
tmp.push_back(it1);
tmp.push_back(it2);
}
+
+ command_delete_xcomparison(conn, config_name, it1->getNum(), it2->getNum());
}
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.2.1/client/commands.cc new/snapper-0.2.1/client/commands.cc
--- old/snapper-0.2.1/client/commands.cc 2014-01-29 16:48:30.000000000 +0100
+++ new/snapper-0.2.1/client/commands.cc 2014-03-03 17:32:41.000000000 +0100
@@ -294,6 +294,19 @@
}
+void
+command_delete_xcomparison(DBus::Connection& conn, const string& config_name, unsigned int number1,
+ unsigned int number2)
+{
+ DBus::MessageMethodCall call(SERVICE, OBJECT, INTERFACE, "DeleteComparison");
+
+ DBus::Hoho hoho(call);
+ hoho << config_name << number1 << number2;
+
+ conn.send_with_reply_and_block(call);
+}
+
+
list<XFile>
command_get_xfiles(DBus::Connection& conn, const string& config_name, unsigned int number1,
unsigned int number2)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.2.1/client/commands.h new/snapper-0.2.1/client/commands.h
--- old/snapper-0.2.1/client/commands.h 2014-01-29 16:48:30.000000000 +0100
+++ new/snapper-0.2.1/client/commands.h 2014-03-03 17:32:41.000000000 +0100
@@ -95,6 +95,10 @@
command_create_xcomparison(DBus::Connection& conn, const string& config_name, unsigned int number1,
unsigned int number2);
+void
+command_delete_xcomparison(DBus::Connection& conn, const string& config_name, unsigned int number1,
+ unsigned int number2);
+
list<XFile>
command_get_xfiles(DBus::Connection& conn, const string& config_name, unsigned int number1,
unsigned int number2);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.2.1/doc/snapper.xml.in new/snapper-0.2.1/doc/snapper.xml.in
--- old/snapper-0.2.1/doc/snapper.xml.in 2014-01-31 10:38:25.000000000 +0100
+++ new/snapper-0.2.1/doc/snapper.xml.in 2014-02-27 14:50:22.000000000 +0100
@@ -422,6 +422,38 @@
</listitem>
</varlistentry>
</variablelist>
+ <para>The output consists of a string encoding the status followed by
+ the filename. The characters of the status string are:</para>
+ <orderedlist>
+ <listitem>
+ <para>A "<computeroutput>+</computeroutput>" means the file was
+ created, a "<computeroutput>-</computeroutput>" means the file was deleted. A
+ "<computeroutput>c</computeroutput>" means the content of the file has changed
+ and a "<computeroutput>t</computeroutput>" means the type of the file has
+ changed (e.g. from regular file to directory).</para>
+ </listitem>
+ <listitem>
+ <para>A "<computeroutput>p</computeroutput>" means the permissions
+ are have changed.</para>
+ </listitem>
+ <listitem>
+ <para>An "<computeroutput>u</computeroutput>" means the user
+ ownership has changed.</para>
+ </listitem>
+ <listitem>
+ <para>A "<computeroutput>g</computeroutput>" means the group
+ ownership has changed.</para>
+ </listitem>
+ <listitem>
+ <para>A "<computeroutput>x</computeroutput>" means the extended
+ attribute information has changed.</para>
+ </listitem>
+ <listitem>
+ <para>An "<computeroutput>a</computeroutput>" means the ACL
+ information has changed.</para>
+ </listitem>
+ </orderedlist>
+ <para>If there is no change a "." is outputted.</para>
</listitem>
</varlistentry>
@@ -462,11 +494,9 @@
<varlistentry>
<term><option>xadiff <replaceable>number1</replaceable>..<replaceable>number2</replaceable> [files]</option></term>
<listitem>
-
<para>Compare the extended attributes between snapshot
<replaceable>number1</replaceable> and
<replaceable>number2</replaceable>. See examples below:</para>
-
<itemizedlist>
<listitem>
<para><computeroutput> +:user.foo</computeroutput> for created attributes</para>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.2.1/snapper/Acls.cc new/snapper-0.2.1/snapper/Acls.cc
--- old/snapper-0.2.1/snapper/Acls.cc 1970-01-01 01:00:00.000000000 +0100
+++ new/snapper-0.2.1/snapper/Acls.cc 2014-02-26 11:17:13.000000000 +0100
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) [2014] Red Hat, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as published
+ * by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include
+#include
+#include
+
+#include "snapper/Acls.h"
+#include "snapper/AppUtil.h"
+#include "snapper/Exception.h"
+#include "snapper/Log.h"
+#include "snapper/SnapperTmpl.h"
+
+namespace snapper
+{
+ bool
+ is_acl_signature(const std::string& name)
+ {
+ return contains(_acl_signatures, name);
+ }
+
+ Acls::Acls(const string& path)
+ : allowed_types(0x0), acl_access(NULL), acl_default(NULL)
+ {
+ struct stat buf;
+
+ int fd = ::open(path.c_str(), O_RDONLY | O_NOFOLLOW | O_NONBLOCK | O_NOATIME |
+ O_CLOEXEC);
+ if (fd < 0)
+ {
+ if (errno == ELOOP)
+ {
+ y2deb("can't read ACLs from symlink '" << path << "' itself");
+ return;
+ }
+
+ if (stat(path.c_str(), &buf) < 0)
+ {
+ y2err("stat failed errno: " << errno << " (" << stringerror(errno) << ")");
+ throw AclException();
+ }
+ }
+ else
+ {
+ if (fstat(fd, &buf) < 0)
+ {
+ y2err("fstat failed errno: " << errno << " (" << stringerror(errno) << ")");
+ ::close(fd);
+ throw AclException();
+ }
+
+ acl_access = acl_get_fd(fd);
+ if (!acl_access)
+ {
+ y2err("acl_get_fd failed errno: " << errno << " (" << stringerror(errno) << ")");
+ ::close(fd);
+ throw AclException();
+ }
+
+ ::close(fd);
+ allowed_types = ACL_TYPE_ACCESS;
+ }
+
+ allowed_types |= (S_ISDIR(buf.st_mode)) ? ACL_TYPE_DEFAULT : 0x0;
+
+ // in case open failed for some reason
+ if (!(allowed_types & ACL_TYPE_ACCESS))
+ {
+ allowed_types |= ACL_TYPE_ACCESS;
+ acl_access = acl_get_file(path.c_str(), ACL_TYPE_ACCESS);
+ if (!acl_access)
+ {
+ y2err("acl_get_file failed errno: " << errno << " (" << stringerror(errno) << ")");
+ throw AclException();
+ }
+ }
+
+ // ACL_TYPE_DEFAULT can't be read from fd
+ if (allowed_types & ACL_TYPE_DEFAULT)
+ {
+ acl_default = acl_get_file(path.c_str(), ACL_TYPE_DEFAULT);
+ if (!acl_default)
+ {
+ y2err("acl_get_file failed errno: " << errno << " (" << stringerror(errno) << ")");
+ if (acl_free(acl_access))
+ {
+ y2err("acl_free failed errno: " << errno << " (" << stringerror(errno) << ")");
+ }
+
+ throw AclException();
+ }
+ }
+ }
+
+
+ Acls::~Acls()
+ {
+ if (acl_access)
+ acl_free(acl_access);
+ if (acl_default)
+ acl_free(acl_default);
+ }
+
+
+ void
+ Acls::serializeTo(const string& path) const
+ {
+ if (empty())
+ return;
+
+ if (acl_set_file(path.c_str(), ACL_TYPE_ACCESS, acl_access))
+ {
+ y2err("acl_set_file failed errno: " << errno << " (" << stringerror(errno) << ")");
+ throw AclException();
+ }
+
+ if (get_acl_types() & ACL_TYPE_DEFAULT)
+ {
+ if (acl_set_file(path.c_str(), ACL_TYPE_DEFAULT, acl_default))
+ {
+ y2err("acl_set_file failed errno: " << errno << " (" << stringerror(errno) << ")");
+ throw AclException();
+ }
+ }
+ }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.2.1/snapper/Acls.h new/snapper-0.2.1/snapper/Acls.h
--- old/snapper-0.2.1/snapper/Acls.h 1970-01-01 01:00:00.000000000 +0100
+++ new/snapper-0.2.1/snapper/Acls.h 2014-02-26 11:17:13.000000000 +0100
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) [2014] Red Hat, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as published
+ * by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef SNAPPER_ACLS_H
+#define SNAPPER_ACLS_H
+
+#include <string>
+#include <vector>
+#include
+
+#include
+
+#ifndef ENABLE_ACL_SIGNATURES
+#define ENABLE_ACL_SIGNATURES ("system.posix_acl_access") \
+ ("system.posix_acl_default") \
+ ("trusted.SGI_ACL_FILE") \
+ ("trusted.SGI_ACL_DEFAULT")
+#endif
+
+namespace snapper
+{
+ using std::string;
+
+ const std::vector<string> _acl_signatures = boost::assign::list_of ENABLE_ACL_SIGNATURES;
+
+ bool is_acl_signature(const string& name);
+
+ class Acls
+ {
+ public:
+
+ Acls(const string& path);
+ ~Acls();
+
+ acl_type_t get_acl_types() const { return allowed_types; }
+ bool empty() const { return allowed_types == 0x0; }
+ void serializeTo(const string& path) const;
+
+ private:
+
+ acl_type_t allowed_types;
+ acl_t acl_access;
+ acl_t acl_default;
+ };
+
+}
+#endif //SNAPPER_ACLS_H
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.2.1/snapper/Btrfs.cc new/snapper-0.2.1/snapper/Btrfs.cc
--- old/snapper-0.2.1/snapper/Btrfs.cc 2014-02-03 16:47:51.000000000 +0100
+++ new/snapper-0.2.1/snapper/Btrfs.cc 2014-02-26 18:11:56.000000000 +0100
@@ -47,6 +47,7 @@
#include "snapper/Snapper.h"
#include "snapper/SnapperTmpl.h"
#include "snapper/SnapperDefines.h"
+#include "snapper/Acls.h"
namespace snapper
@@ -450,10 +451,10 @@
if (status & CREATED) status = CREATED;
if (status & DELETED) status = DELETED;
- if (status & (CONTENT | PERMISSIONS | USER | GROUP | XATTRS))
+ if (status & (CONTENT | PERMISSIONS | OWNER | GROUP | XATTRS | ACL))
{
// TODO check for content sometimes not required
- status &= ~(CONTENT | PERMISSIONS | USER | GROUP | XATTRS);
+ status &= ~(CONTENT | PERMISSIONS | OWNER | GROUP | XATTRS | ACL);
string dirname = snapper::dirname(name);
string basename = snapper::basename(name);
@@ -546,7 +547,7 @@
else
{
node->status &= ~(CREATED | DELETED);
- node->status |= CONTENT | PERMISSIONS | USER | GROUP | XATTRS;
+ node->status |= CONTENT | PERMISSIONS | OWNER | GROUP | XATTRS | ACL;
}
}
@@ -679,7 +680,7 @@
else
{
node->status &= ~(CREATED | DELETED);
- node->status |= CONTENT | PERMISSIONS | USER | GROUP | XATTRS;
+ node->status |= CONTENT | PERMISSIONS | OWNER | GROUP | XATTRS | ACL;
}
merge(processor, &it->second, from, to, x);
@@ -697,7 +698,7 @@
else
{
node->status &= ~(CREATED | DELETED);
- node->status |= CONTENT | PERMISSIONS | USER | GROUP | XATTRS;
+ node->status |= CONTENT | PERMISSIONS | OWNER | GROUP | XATTRS | ACL;
}
merge(processor, &it->second, from, to, x);
@@ -854,6 +855,14 @@
tree_node* node = processor->files.insert(path);
node->status |= XATTRS;
+
+ if (is_acl_signature(name))
+ {
+ #ifdef DEBUG_PROCESS
+ y2deb("adding acl flag, signature:'" << name << "'");
+ #endif
+ node->status |= ACL;
+ }
#endif
return 0;
@@ -872,6 +881,14 @@
tree_node* node = processor->files.insert(path);
node->status |= XATTRS;
+
+ if (is_acl_signature(name))
+ {
+ #ifdef DEBUG_PROCESS
+ y2deb("adding acl flag, signature:'" << name << "'");
+ #endif
+ node->status |= ACL;
+ }
#endif
return 0;
@@ -920,7 +937,7 @@
#endif
tree_node* node = processor->files.insert(path);
- node->status |= USER | GROUP;
+ node->status |= OWNER | GROUP;
return 0;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.2.1/snapper/Compare.cc new/snapper-0.2.1/snapper/Compare.cc
--- old/snapper-0.2.1/snapper/Compare.cc 2014-01-29 16:48:30.000000000 +0100
+++ new/snapper-0.2.1/snapper/Compare.cc 2014-02-26 18:11:56.000000000 +0100
@@ -38,6 +38,7 @@
#include "snapper/Compare.h"
#include "snapper/Exception.h"
#include "snapper/XAttributes.h"
+#include "snapper/Acls.h"
namespace snapper
@@ -211,7 +212,7 @@
if (stat1.st_uid != stat2.st_uid)
{
- status |= USER;
+ status |= OWNER;
}
if (stat1.st_gid != stat2.st_gid)
@@ -222,10 +223,7 @@
#ifdef ENABLE_XATTRS
if (file1.xaSupported() && file2.xaSupported())
{
- if (!cmpFilesXattrs(file1, file2))
- {
- status |= XATTRS;
- }
+ status |= cmpFilesXattrs(file1, file2);
}
#endif
@@ -467,19 +465,34 @@
}
- bool
+ unsigned int
cmpFilesXattrs(const SFile& file1, const SFile& file2)
{
try
{
XAttributes xa(file1);
XAttributes xb(file2);
- return xa == xb;
+
+ if (xa == xb)
+ {
+ return 0;
+ }
+ else
+ {
+ unsigned int status = XATTRS;
+
+ CompareAcls acl_a(xa);
+ CompareAcls acl_b(xb);
+
+ status |= (acl_a == acl_b) ? 0 : ACL;
+
+ return status;
+ }
}
catch (const XAttributesException& e)
{
- y2err("extended attributes compare failed");
- return false;
+ y2err("extended attributes or ACL compare failed");
+ return (XATTRS | ACL);
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.2.1/snapper/Compare.h new/snapper-0.2.1/snapper/Compare.h
--- old/snapper-0.2.1/snapper/Compare.h 2014-01-29 16:48:30.000000000 +0100
+++ new/snapper-0.2.1/snapper/Compare.h 2014-02-26 11:17:13.000000000 +0100
@@ -48,7 +48,9 @@
void
cmpDirs(const SDir& dir1, const SDir& dir2, cmpdirs_cb_t cb);
- bool
+ /* Compares the two files extended attributes and ACLs.
+ Returns 0 or XATTRS or (XATTRS | ACL) */
+ unsigned int
cmpFilesXattrs(const SFile&, const SFile&);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.2.1/snapper/File.cc new/snapper-0.2.1/snapper/File.cc
--- old/snapper-0.2.1/snapper/File.cc 2014-01-29 16:48:30.000000000 +0100
+++ new/snapper-0.2.1/snapper/File.cc 2014-02-28 13:36:50.000000000 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) [2011-2013] Novell, Inc.
+ * Copyright (c) [2011-2014] Novell, Inc.
*
* All Rights Reserved.
*
@@ -40,6 +40,7 @@
#include "snapper/Compare.h"
#include "snapper/Exception.h"
#include "snapper/XAttributes.h"
+#include "snapper/Acls.h"
namespace snapper
@@ -333,16 +334,16 @@
}
}
- if (chmod(getAbsolutePath(LOC_SYSTEM).c_str(), mode) != 0)
+ if (chown(getAbsolutePath(LOC_SYSTEM).c_str(), owner, group) != 0)
{
- y2err("chmod failed path:" << getAbsolutePath(LOC_SYSTEM) << " errno:" << errno <<
+ y2err("chown failed path:" << getAbsolutePath(LOC_SYSTEM) << " errno:" << errno <<
" (" << stringerror(errno) << ")");
return false;
}
- if (chown(getAbsolutePath(LOC_SYSTEM).c_str(), owner, group) != 0)
+ if (chmod(getAbsolutePath(LOC_SYSTEM).c_str(), mode) != 0)
{
- y2err("chown failed path:" << getAbsolutePath(LOC_SYSTEM) << " errno:" << errno <<
+ y2err("chmod failed path:" << getAbsolutePath(LOC_SYSTEM) << " errno:" << errno <<
" (" << stringerror(errno) << ")");
return false;
}
@@ -370,19 +371,19 @@
return false;
}
- int r1 = fchmod(dest_fd, mode);
+ int r1 = fchown(dest_fd, owner, group);
if (r1 != 0)
{
- y2err("fchmod failed errno:" << errno << " (" << stringerror(errno) << ")");
+ y2err("fchown failed errno:" << errno << " (" << stringerror(errno) << ")");
close(dest_fd);
close(src_fd);
return false;
}
- int r2 = fchown(dest_fd, owner, group);
+ int r2 = fchmod(dest_fd, mode);
if (r2 != 0)
{
- y2err("fchown failed errno:" << errno << " (" << stringerror(errno) << ")");
+ y2err("fchmod failed errno:" << errno << " (" << stringerror(errno) << ")");
close(dest_fd);
close(src_fd);
return false;
@@ -503,23 +504,26 @@
}
}
- if (getPreToPostStatus() & PERMISSIONS)
+ if (getPreToPostStatus() & (OWNER | GROUP))
{
- if (chmod(getAbsolutePath(LOC_SYSTEM).c_str(), fs.st_mode) != 0)
+ if (lchown(getAbsolutePath(LOC_SYSTEM).c_str(), fs.st_uid, fs.st_gid) != 0)
{
- y2err("chmod failed path:" << getAbsolutePath(LOC_SYSTEM) << " errno:" <<
- errno << " (" << stringerror(errno) << ")");
+ y2err("lchown failed path:" << getAbsolutePath(LOC_SYSTEM) << " errno:" <<
+ errno << " (" << stringerror(errno) << ")");
return false;
}
}
- if (getPreToPostStatus() & (USER | GROUP))
+ if (getPreToPostStatus() & (OWNER | GROUP | PERMISSIONS))
{
- if (lchown(getAbsolutePath(LOC_SYSTEM).c_str(), fs.st_uid, fs.st_gid) != 0)
+ if (!S_ISLNK(fs.st_mode))
{
- y2err("lchown failed path:" << getAbsolutePath(LOC_SYSTEM) << " errno:" <<
- errno << " (" << stringerror(errno) << ")");
- return false;
+ if (chmod(getAbsolutePath(LOC_SYSTEM).c_str(), fs.st_mode) != 0)
+ {
+ y2err("chmod failed path:" << getAbsolutePath(LOC_SYSTEM) << " errno:" <<
+ errno << " (" << stringerror(errno) << ")");
+ return false;
+ }
}
}
}
@@ -540,6 +544,8 @@
XAModification xa_mod(xa_src, xa_dest);
y2deb("xa_modmap(xa_dest) object: " << xa_mod);
+ xa_mod.filterOutAcls();
+
xaCreated = xa_mod.getXaCreateNum();
xaDeleted = xa_mod.getXaDeleteNum();
xaReplaced = xa_mod.getXaReplaceNum();
@@ -556,6 +562,28 @@
return ret_val;
}
+
+ bool
+ File::modifyAcls()
+ {
+ bool ret_val;
+
+ try
+ {
+ Acls acl(getAbsolutePath(LOC_PRE));
+ acl.serializeTo(getAbsolutePath(LOC_SYSTEM));
+
+ ret_val = true;
+ }
+ catch (const AclException& e)
+ {
+ ret_val = false;
+ }
+
+ return ret_val;
+ }
+
+
XAUndoStatistic& operator+=(XAUndoStatistic &out, const XAUndoStatistic &src)
{
out.numCreate += src.numCreate;
@@ -611,7 +639,7 @@
error = true;
}
- if (getPreToPostStatus() & (CONTENT | PERMISSIONS | USER | GROUP))
+ if (getPreToPostStatus() & (CONTENT | PERMISSIONS | OWNER | GROUP))
{
if (!modifyAllTypes())
error = true;
@@ -628,6 +656,12 @@
if (!modifyXattributes())
error = true;
}
+
+ if (getPreToPostStatus() & (ACL | TYPE | DELETED))
+ {
+ if (!modifyAcls())
+ error = true;
+ }
#endif
pre_to_system_status = (unsigned int) -1;
@@ -711,6 +745,9 @@
string
statusToString(unsigned int status)
{
+ // If possible keep the characters in sync with e.g. rpm or
+ // rsync. Unfortunately rpm and rsync are not consistent.
+
string ret;
if (status & CREATED)
@@ -725,9 +762,10 @@
ret += ".";
ret += status & PERMISSIONS ? "p" : ".";
- ret += status & USER ? "u" : ".";
+ ret += status & OWNER ? "u" : ".";
ret += status & GROUP ? "g" : ".";
- ret += status & XATTRS ? "x" : ".";
+ ret += status & XATTRS ? "x" : ".";
+ ret += status & ACL ? "a" : ".";
return ret;
}
@@ -758,7 +796,7 @@
if (str.length() >= 3)
{
if (str[2] == 'u')
- ret |= USER;
+ ret |= OWNER;
}
if (str.length() >= 4)
@@ -768,10 +806,16 @@
}
if (str.length() >= 5)
- {
- if (str[4] == 'x')
- ret |= XATTRS;
- }
+ {
+ if (str[4] == 'x')
+ ret |= XATTRS;
+ }
+
+ if (str.length() >= 6)
+ {
+ if (str[5] == 'a')
+ ret |= ACL;
+ }
return ret;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.2.1/snapper/File.h new/snapper-0.2.1/snapper/File.h
--- old/snapper-0.2.1/snapper/File.h 2014-01-29 16:48:30.000000000 +0100
+++ new/snapper-0.2.1/snapper/File.h 2014-02-26 18:11:56.000000000 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) [2011-2012] Novell, Inc.
+ * Copyright (c) [2011-2014] Novell, Inc.
*
* All Rights Reserved.
*
@@ -38,8 +38,16 @@
enum StatusFlags
{
- CREATED = 1, DELETED = 2, TYPE = 4, CONTENT = 8, PERMISSIONS = 16, USER = 32,
- GROUP = 64, XATTRS = 128
+ CREATED = 1, // created
+ DELETED = 2, // deleted
+ TYPE = 4, // type has changed
+ CONTENT = 8, // content has changed
+ PERMISSIONS = 16, // permissions have changed, see chmod(2)
+ OWNER = 32, // owner has changed, see chown(2)
+ USER = 32, // deprecated - alias for OWNER
+ GROUP = 64, // group has changed, see chown(2)
+ XATTRS = 128, // extended attributes changed, see attr(5)
+ ACL = 256 // access control list changed, see acl(5)
};
enum Cmp
@@ -156,6 +164,7 @@
bool undo;
bool modifyXattributes();
+ bool modifyAcls();
unsigned int xaCreated;
unsigned int xaDeleted;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.2.1/snapper/Makefile.am new/snapper-0.2.1/snapper/Makefile.am
--- old/snapper-0.2.1/snapper/Makefile.am 2014-01-29 16:48:30.000000000 +0100
+++ new/snapper-0.2.1/snapper/Makefile.am 2014-02-26 11:17:13.000000000 +0100
@@ -26,12 +26,12 @@
SystemCmd.cc SystemCmd.h \
AsciiFile.cc AsciiFile.h \
Regex.cc Regex.h \
+ Acls.cc Acls.h \
Exception.h \
SnapperTmpl.h \
SnapperTypes.h \
SnapperDefines.h \
- Version.h \
- $(TMP_XA)
+ Version.h
if ENABLE_BTRFS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.2.1/snapper/Makefile.in new/snapper-0.2.1/snapper/Makefile.in
--- old/snapper-0.2.1/snapper/Makefile.in 2014-02-11 14:40:13.000000000 +0100
+++ new/snapper-0.2.1/snapper/Makefile.in 2014-03-03 17:33:12.000000000 +0100
@@ -141,18 +141,18 @@
Enum.cc Enum.h AppUtil.cc AppUtil.h FileUtils.cc FileUtils.h \
XAttributes.cc XAttributes.h Log.cc Log.h Logger.cc Logger.h \
Compare.cc Compare.h SystemCmd.cc SystemCmd.h AsciiFile.cc \
- AsciiFile.h Regex.cc Regex.h Exception.h SnapperTmpl.h \
- SnapperTypes.h SnapperDefines.h Version.h Btrfs.cc Btrfs.h \
- BtrfsUtils.cc BtrfsUtils.h Ext4.cc Ext4.h Lvm.cc Lvm.h \
- LvmCache.cc LvmCache.h
+ AsciiFile.h Regex.cc Regex.h Acls.cc Acls.h Exception.h \
+ SnapperTmpl.h SnapperTypes.h SnapperDefines.h Version.h \
+ Btrfs.cc Btrfs.h BtrfsUtils.cc BtrfsUtils.h Ext4.cc Ext4.h \
+ Lvm.cc Lvm.h LvmCache.cc LvmCache.h
@ENABLE_BTRFS_TRUE@am__objects_1 = Btrfs.lo BtrfsUtils.lo
@ENABLE_EXT4_TRUE@am__objects_2 = Ext4.lo
@ENABLE_LVM_TRUE@am__objects_3 = Lvm.lo LvmCache.lo
am_libsnapper_la_OBJECTS = Factory.lo Snapper.lo Snapshot.lo \
Comparison.lo Filesystem.lo File.lo XmlFile.lo Enum.lo \
AppUtil.lo FileUtils.lo XAttributes.lo Log.lo Logger.lo \
- Compare.lo SystemCmd.lo AsciiFile.lo Regex.lo $(am__objects_1) \
- $(am__objects_2) $(am__objects_3)
+ Compare.lo SystemCmd.lo AsciiFile.lo Regex.lo Acls.lo \
+ $(am__objects_1) $(am__objects_2) $(am__objects_3)
libsnapper_la_OBJECTS = $(am_libsnapper_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -394,8 +394,8 @@
Enum.cc Enum.h AppUtil.cc AppUtil.h FileUtils.cc FileUtils.h \
XAttributes.cc XAttributes.h Log.cc Log.h Logger.cc Logger.h \
Compare.cc Compare.h SystemCmd.cc SystemCmd.h AsciiFile.cc \
- AsciiFile.h Regex.cc Regex.h Exception.h SnapperTmpl.h \
- SnapperTypes.h SnapperDefines.h Version.h $(TMP_XA) \
+ AsciiFile.h Regex.cc Regex.h Acls.cc Acls.h Exception.h \
+ SnapperTmpl.h SnapperTypes.h SnapperDefines.h Version.h \
$(am__append_1) $(am__append_2) $(am__append_3)
libsnapper_la_LDFLAGS = -version-info @LIBVERSION_INFO@
libsnapper_la_LIBADD = -lboost_thread-mt -lboost_system-mt -lxml2 -lacl -lz -lm
@@ -491,6 +491,7 @@
distclean-compile:
-rm -f *.tab.c
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Acls.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AppUtil.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AsciiFile.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Btrfs.Plo@am__quote@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.2.1/snapper/XAttributes.cc new/snapper-0.2.1/snapper/XAttributes.cc
--- old/snapper-0.2.1/snapper/XAttributes.cc 2014-01-29 16:48:30.000000000 +0100
+++ new/snapper-0.2.1/snapper/XAttributes.cc 2014-02-26 11:17:13.000000000 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) [2013] Red Hat, Inc.
+ * Copyright (c) [2013-2014] Red Hat, Inc.
*
* All Rights Reserved.
*
@@ -29,15 +29,51 @@
#include
#include <iomanip>
#include
+#include <algorithm>
#include "snapper/AppUtil.h"
#include "snapper/Exception.h"
#include "snapper/Log.h"
#include "snapper/XAttributes.h"
+#include "snapper/Acls.h"
+#include "snapper/SnapperTmpl.h"
namespace snapper
{
+ struct FilterAclsHelper
+ {
+ FilterAclsHelper(const vector<string>& acl_sigs)
+ : acl_sigs(acl_sigs) {}
+
+ bool operator()(const xa_pair_t& pair)
+ {
+ return contains(acl_sigs, pair.first);
+ }
+
+ bool operator()(const string& name)
+ {
+ return contains(acl_sigs, name);
+ }
+
+ const vector<string>& acl_sigs;
+ };
+
+
+ struct InsertAclsHelper
+ {
+ InsertAclsHelper(xa_map_t& xamap, const vector<string>& acl_sigs)
+ : map(xamap), acl_sigs(acl_sigs) {}
+ void operator()(const xa_pair_t& xapair)
+ {
+ if (contains(acl_sigs, xapair.first))
+ map.insert(xapair);
+ }
+
+ xa_map_t& map;
+ const vector<string>& acl_sigs;
+ };
+
XAttributes::XAttributes(const string &path)
{
@@ -73,6 +109,7 @@
// move beyond separating '\0' char
pos += name.length() + 1;
+
ssize_t v_size = lgetxattr(path.c_str(), name.c_str(), NULL, 0);
if (v_size < 0)
{
@@ -180,6 +217,7 @@
return (this == &xa) ? true : (this->xamap == xa.xamap);
}
+
ostream&
operator<<(ostream &out, const XAttributes &xa)
{
@@ -194,6 +232,7 @@
return out;
}
+
ostream&
operator<<(ostream &out, const xa_value_t &xavalue)
{
@@ -262,14 +301,17 @@
y2deb("adding create operation for " << src_cit->first);
create_vec.push_back(xa_pair_t(src_cit->first, src_cit->second));
}
+
}
+
bool
XAModification::empty() const
{
return create_vec.empty() && delete_vec.empty() && replace_vec.empty();
}
+
bool
XAModification::serializeTo(const string &dest) const
{
@@ -336,24 +378,28 @@
return true;
}
+
unsigned int
XAModification::getXaCreateNum() const
{
return create_vec.size();
}
+
unsigned int
XAModification::getXaDeleteNum() const
{
return delete_vec.size();
}
+
unsigned int
XAModification::getXaReplaceNum() const
{
return replace_vec.size();
}
+
void
XAModification::printTo(ostream& out, bool diff) const
{
@@ -381,16 +427,46 @@
}
}
+
void
XAModification::dumpDiffReport(ostream& out) const
{
printTo(out, true);
}
+
ostream&
operator<<(ostream &out, const XAModification &xa_mod)
{
xa_mod.printTo(out, false);
return out;
}
+
+
+ CompareAcls::CompareAcls(const XAttributes& xa)
+ {
+ std::for_each(xa.cbegin(), xa.cend(), InsertAclsHelper(xamap, _acl_signatures));
+ }
+
+
+ bool
+ CompareAcls::operator==(const CompareAcls& acls) const
+ {
+ return (this == &acls) ? true : (this->xamap == acls.xamap);
+ }
+
+
+ void
+ XAModification::filterOutAcls()
+ {
+ FilterAclsHelper fhelper(_acl_signatures);
+
+ create_vec.erase(std::remove_if(create_vec.begin(), create_vec.end(), fhelper),
+ create_vec.end());
+ delete_vec.erase(std::remove_if(delete_vec.begin(), delete_vec.end(), fhelper),
+ delete_vec.end());
+ replace_vec.erase(std::remove_if(replace_vec.begin(), replace_vec.end(), fhelper),
+ replace_vec.end());
+ }
+
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.2.1/snapper/XAttributes.h new/snapper-0.2.1/snapper/XAttributes.h
--- old/snapper-0.2.1/snapper/XAttributes.h 2014-01-29 16:48:30.000000000 +0100
+++ new/snapper-0.2.1/snapper/XAttributes.h 2014-02-26 11:17:13.000000000 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) [2013] Red Hat, Inc.
+ * Copyright (c) [2013-2014] Red Hat, Inc.
*
* All Rights Reserved.
*
@@ -33,65 +33,76 @@
namespace snapper
{
- using std::map;
- using std::string;
- using std::pair;
- using std::ostream;
- using std::vector;
-
- typedef vector xa_value_t;
- typedef map xa_map_t;
- typedef pair xa_pair_t;
- typedef vector xa_mod_vec_t;
- typedef vector<string> xa_del_vec_t;
-
- // iterators
- typedef xa_map_t::const_iterator xa_map_citer;
- typedef xa_mod_vec_t::const_iterator xa_mod_vec_citer;
- typedef xa_del_vec_t::const_iterator xa_del_vec_citer;
-
- class XAttributes
- {
- private:
- xa_map_t xamap;
- public:
- XAttributes(const string&);
- XAttributes(const SFile& dir);
-
- xa_map_citer cbegin() const { return xamap.begin(); }
- xa_map_citer cend() const { return xamap.end(); }
-
- bool operator==(const XAttributes&) const;
- };
-
- class XAModification
- {
- private:
- xa_mod_vec_t create_vec;
- xa_del_vec_t delete_vec;
- xa_mod_vec_t replace_vec;
-
- void printTo(ostream&, bool) const;
- public:
-
- XAModification(const XAttributes&, const XAttributes&);
-
- bool empty() const;
- bool serializeTo(const string&) const;
-
- unsigned int getXaCreateNum() const;
- unsigned int getXaDeleteNum() const;
- unsigned int getXaReplaceNum() const;
-
- // this will generate diff report
- void dumpDiffReport(ostream&) const;
-
- // this will print out the class content
- friend ostream& operator<<(ostream&, const XAModification&);
- };
+ using std::map;
+ using std::string;
+ using std::pair;
+ using std::ostream;
+ using std::vector;
+
+ typedef vector xa_value_t;
+ typedef map xa_map_t;
+ typedef pair xa_pair_t;
+ typedef vector xa_mod_vec_t;
+ typedef vector<string> xa_del_vec_t;
+
+ // iterators
+ typedef xa_map_t::const_iterator xa_map_citer;
+ typedef xa_mod_vec_t::const_iterator xa_mod_vec_citer;
+ typedef xa_del_vec_t::const_iterator xa_del_vec_citer;
+
+ class XAttributes
+ {
+ private:
+ xa_map_t xamap;
+ public:
+ XAttributes(const string&);
+ XAttributes(const SFile& dir);
+
+ xa_map_citer cbegin() const { return xamap.begin(); }
+ xa_map_citer cend() const { return xamap.end(); }
+
+ bool operator==(const XAttributes&) const;
+ };
+
+ class XAModification
+ {
+ private:
+ xa_mod_vec_t create_vec;
+ xa_del_vec_t delete_vec;
+ xa_mod_vec_t replace_vec;
+
+ void printTo(ostream&, bool) const;
+ public:
+
+ XAModification(const XAttributes&, const XAttributes&);
+
+ bool empty() const;
+ void filterOutAcls();
+ bool serializeTo(const string&) const;
+
+ unsigned int getXaCreateNum() const;
+ unsigned int getXaDeleteNum() const;
+ unsigned int getXaReplaceNum() const;
+
+ // this will generate diff report
+ void dumpDiffReport(ostream&) const;
+
+ // this will print out the class content
+ friend ostream& operator<<(ostream&, const XAModification&);
+ };
+
+ ostream& operator<<(ostream&, const XAttributes&);
+ ostream& operator<<(ostream&, const xa_value_t&);
+
+ class CompareAcls
+ {
+ private:
+ xa_map_t xamap;
+ public:
+ CompareAcls(const XAttributes& xa);
- ostream& operator<<(ostream&, const XAttributes&);
- ostream& operator<<(ostream&, const xa_value_t&);
+ bool operator==(const CompareAcls&) const;
+ };
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.2.1/testsuite-real/Makefile.am new/snapper-0.2.1/testsuite-real/Makefile.am
--- old/snapper-0.2.1/testsuite-real/Makefile.am 2014-01-29 16:48:30.000000000 +0100
+++ new/snapper-0.2.1/testsuite-real/Makefile.am 2014-02-28 13:36:50.000000000 +0100
@@ -9,19 +9,20 @@
LDADD = ../snapper/libsnapper.la
if HAVE_XATTRS
-TMP_XATST = xattrs1 xattrs2 xattrs3
+TMP_XATST = xattrs1 xattrs2 xattrs3 xattrs4
endif
noinst_SCRIPTS = run-all
-noinst_PROGRAMS = simple1 permissions1 permissions2 owner1 owner2 owner3 \
- directory1 missing-directory1 error1 error2 error4 \
+noinst_PROGRAMS = simple1 permissions1 permissions2 permissions3 owner1 owner2 \
+ owner3 directory1 missing-directory1 error1 error2 error4 \
$(TMP_XATST)
simple1_SOURCES = simple1.cc common.h common.cc
permissions1_SOURCES = permissions1.cc common.h common.cc
permissions2_SOURCES = permissions2.cc common.h common.cc
+permissions3_SOURCES = permissions3.cc common.h common.cc
owner1_SOURCES = owner1.cc common.h common.cc
owner2_SOURCES = owner2.cc common.h common.cc
@@ -38,6 +39,7 @@
xattrs1_SOURCES = xattrs1.cc xattrs_utils.cc xattrs_utils.h common.h common.cc
xattrs2_SOURCES = xattrs2.cc xattrs_utils.cc xattrs_utils.h common.h common.cc
xattrs3_SOURCES = xattrs3.cc xattrs_utils.cc xattrs_utils.h common.h common.cc
+xattrs4_SOURCES = xattrs4.cc xattrs_utils.cc xattrs_utils.h common.h common.cc
EXTRA_DIST = $(noinst_SCRIPTS)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.2.1/testsuite-real/Makefile.in new/snapper-0.2.1/testsuite-real/Makefile.in
--- old/snapper-0.2.1/testsuite-real/Makefile.in 2014-02-11 14:40:13.000000000 +0100
+++ new/snapper-0.2.1/testsuite-real/Makefile.in 2014-03-03 17:33:12.000000000 +0100
@@ -84,8 +84,8 @@
build_triplet = @build@
host_triplet = @host@
noinst_PROGRAMS = simple1$(EXEEXT) permissions1$(EXEEXT) \
- permissions2$(EXEEXT) owner1$(EXEEXT) owner2$(EXEEXT) \
- owner3$(EXEEXT) directory1$(EXEEXT) \
+ permissions2$(EXEEXT) permissions3$(EXEEXT) owner1$(EXEEXT) \
+ owner2$(EXEEXT) owner3$(EXEEXT) directory1$(EXEEXT) \
missing-directory1$(EXEEXT) error1$(EXEEXT) error2$(EXEEXT) \
error4$(EXEEXT) $(am__EXEEXT_1)
subdir = testsuite-real
@@ -100,7 +100,7 @@
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
@HAVE_XATTRS_TRUE@am__EXEEXT_1 = xattrs1$(EXEEXT) xattrs2$(EXEEXT) \
-@HAVE_XATTRS_TRUE@ xattrs3$(EXEEXT)
+@HAVE_XATTRS_TRUE@ xattrs3$(EXEEXT) xattrs4$(EXEEXT)
PROGRAMS = $(noinst_PROGRAMS)
am_directory1_OBJECTS = directory1.$(OBJEXT) common.$(OBJEXT)
directory1_OBJECTS = $(am_directory1_OBJECTS)
@@ -147,6 +147,10 @@
permissions2_OBJECTS = $(am_permissions2_OBJECTS)
permissions2_LDADD = $(LDADD)
permissions2_DEPENDENCIES = ../snapper/libsnapper.la
+am_permissions3_OBJECTS = permissions3.$(OBJEXT) common.$(OBJEXT)
+permissions3_OBJECTS = $(am_permissions3_OBJECTS)
+permissions3_LDADD = $(LDADD)
+permissions3_DEPENDENCIES = ../snapper/libsnapper.la
am_simple1_OBJECTS = simple1.$(OBJEXT) common.$(OBJEXT)
simple1_OBJECTS = $(am_simple1_OBJECTS)
simple1_LDADD = $(LDADD)
@@ -166,6 +170,11 @@
xattrs3_OBJECTS = $(am_xattrs3_OBJECTS)
xattrs3_LDADD = $(LDADD)
xattrs3_DEPENDENCIES = ../snapper/libsnapper.la
+am_xattrs4_OBJECTS = xattrs4.$(OBJEXT) xattrs_utils.$(OBJEXT) \
+ common.$(OBJEXT)
+xattrs4_OBJECTS = $(am_xattrs4_OBJECTS)
+xattrs4_LDADD = $(LDADD)
+xattrs4_DEPENDENCIES = ../snapper/libsnapper.la
SCRIPTS = $(noinst_SCRIPTS)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@@ -223,14 +232,15 @@
$(error4_SOURCES) $(missing_directory1_SOURCES) \
$(owner1_SOURCES) $(owner2_SOURCES) $(owner3_SOURCES) \
$(permissions1_SOURCES) $(permissions2_SOURCES) \
- $(simple1_SOURCES) $(xattrs1_SOURCES) $(xattrs2_SOURCES) \
- $(xattrs3_SOURCES)
+ $(permissions3_SOURCES) $(simple1_SOURCES) $(xattrs1_SOURCES) \
+ $(xattrs2_SOURCES) $(xattrs3_SOURCES) $(xattrs4_SOURCES)
DIST_SOURCES = $(directory1_SOURCES) $(error1_SOURCES) \
$(error2_SOURCES) $(error4_SOURCES) \
$(missing_directory1_SOURCES) $(owner1_SOURCES) \
$(owner2_SOURCES) $(owner3_SOURCES) $(permissions1_SOURCES) \
- $(permissions2_SOURCES) $(simple1_SOURCES) $(xattrs1_SOURCES) \
- $(xattrs2_SOURCES) $(xattrs3_SOURCES)
+ $(permissions2_SOURCES) $(permissions3_SOURCES) \
+ $(simple1_SOURCES) $(xattrs1_SOURCES) $(xattrs2_SOURCES) \
+ $(xattrs3_SOURCES) $(xattrs4_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -400,11 +410,12 @@
top_srcdir = @top_srcdir@
INCLUDES = -I$(top_srcdir)
LDADD = ../snapper/libsnapper.la
-@HAVE_XATTRS_TRUE@TMP_XATST = xattrs1 xattrs2 xattrs3
+@HAVE_XATTRS_TRUE@TMP_XATST = xattrs1 xattrs2 xattrs3 xattrs4
noinst_SCRIPTS = run-all
simple1_SOURCES = simple1.cc common.h common.cc
permissions1_SOURCES = permissions1.cc common.h common.cc
permissions2_SOURCES = permissions2.cc common.h common.cc
+permissions3_SOURCES = permissions3.cc common.h common.cc
owner1_SOURCES = owner1.cc common.h common.cc
owner2_SOURCES = owner2.cc common.h common.cc
owner3_SOURCES = owner3.cc common.h common.cc
@@ -416,6 +427,7 @@
xattrs1_SOURCES = xattrs1.cc xattrs_utils.cc xattrs_utils.h common.h common.cc
xattrs2_SOURCES = xattrs2.cc xattrs_utils.cc xattrs_utils.h common.h common.cc
xattrs3_SOURCES = xattrs3.cc xattrs_utils.cc xattrs_utils.h common.h common.cc
+xattrs4_SOURCES = xattrs4.cc xattrs_utils.cc xattrs_utils.h common.h common.cc
EXTRA_DIST = $(noinst_SCRIPTS)
all: all-am
@@ -501,6 +513,10 @@
@rm -f permissions2$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(permissions2_OBJECTS) $(permissions2_LDADD) $(LIBS)
+permissions3$(EXEEXT): $(permissions3_OBJECTS) $(permissions3_DEPENDENCIES) $(EXTRA_permissions3_DEPENDENCIES)
+ @rm -f permissions3$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(permissions3_OBJECTS) $(permissions3_LDADD) $(LIBS)
+
simple1$(EXEEXT): $(simple1_OBJECTS) $(simple1_DEPENDENCIES) $(EXTRA_simple1_DEPENDENCIES)
@rm -f simple1$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(simple1_OBJECTS) $(simple1_LDADD) $(LIBS)
@@ -517,6 +533,10 @@
@rm -f xattrs3$(EXEEXT)
$(AM_V_CXXLD)$(CXXLINK) $(xattrs3_OBJECTS) $(xattrs3_LDADD) $(LIBS)
+xattrs4$(EXEEXT): $(xattrs4_OBJECTS) $(xattrs4_DEPENDENCIES) $(EXTRA_xattrs4_DEPENDENCIES)
+ @rm -f xattrs4$(EXEEXT)
+ $(AM_V_CXXLD)$(CXXLINK) $(xattrs4_OBJECTS) $(xattrs4_LDADD) $(LIBS)
+
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -534,10 +554,12 @@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/owner3.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/permissions1.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/permissions2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/permissions3.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple1.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xattrs1.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xattrs2.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xattrs3.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xattrs4.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xattrs_utils.Po@am__quote@
.cc.o:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.2.1/testsuite-real/permissions3.cc new/snapper-0.2.1/testsuite-real/permissions3.cc
--- old/snapper-0.2.1/testsuite-real/permissions3.cc 1970-01-01 01:00:00.000000000 +0100
+++ new/snapper-0.2.1/testsuite-real/permissions3.cc 2014-02-28 13:36:50.000000000 +0100
@@ -0,0 +1,38 @@
+
+#include "common.h"
+
+using namespace std;
+
+
+int
+main()
+{
+ setup();
+
+ run_command("echo hello > setuid1");
+ run_command("chmod u+s,a+x setuid1");
+
+ run_command("touch setuid2");
+ run_command("chmod u+s,a+x setuid2");
+
+ first_snapshot();
+
+ run_command("echo world >> setuid1");
+
+ run_command("chown :nobody setuid2");
+ run_command("chmod u+s setuid2");
+
+ second_snapshot();
+
+ check_undo_statistics(0, 2, 0);
+
+ undo();
+
+ check_undo_errors(0, 0, 0);
+
+ check_first();
+
+ cleanup();
+
+ exit(EXIT_SUCCESS);
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.2.1/testsuite-real/run-all new/snapper-0.2.1/testsuite-real/run-all
--- old/snapper-0.2.1/testsuite-real/run-all 2014-01-29 16:48:30.000000000 +0100
+++ new/snapper-0.2.1/testsuite-real/run-all 2014-02-28 13:36:50.000000000 +0100
@@ -22,6 +22,7 @@
run permissions1
run permissions2
+run permissions3
run owner1
run owner2
@@ -38,3 +39,4 @@
test -x xattrs1 && run xattrs1
test -x xattrs2 && run xattrs2
test -x xattrs3 && run xattrs3
+test -x xattrs4 && run xattrs4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.2.1/testsuite-real/xattrs1.cc new/snapper-0.2.1/testsuite-real/xattrs1.cc
--- old/snapper-0.2.1/testsuite-real/xattrs1.cc 2014-01-29 16:48:30.000000000 +0100
+++ new/snapper-0.2.1/testsuite-real/xattrs1.cc 2014-02-26 11:17:13.000000000 +0100
@@ -28,7 +28,8 @@
check_undo_statistics(0, 1, 0);
- check_xa_undo_statistics(2, 1, 1);
+ // do not count ACLs
+ check_xa_undo_statistics(1, 1, 1);
check_undo_errors(0, 0, 0);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapper-0.2.1/testsuite-real/xattrs4.cc new/snapper-0.2.1/testsuite-real/xattrs4.cc
--- old/snapper-0.2.1/testsuite-real/xattrs4.cc 1970-01-01 01:00:00.000000000 +0100
+++ new/snapper-0.2.1/testsuite-real/xattrs4.cc 2014-02-26 11:17:13.000000000 +0100
@@ -0,0 +1,41 @@
+
+#include "common.h"
+
+using namespace std;
+
+int
+main()
+{
+ setup();
+
+ run_command("touch file1");
+ run_command("mkdir dir1");
+ run_command("mkdir no_default");
+ run_command("setfacl -b file1");
+ run_command("setfacl -k dir1");
+ run_command("setfacl -k no_default");
+ run_command("setfacl -m u:nobody:rw file1");
+ run_command("setfacl -d -m u:nobody:w dir1");
+
+ first_snapshot();
+
+ run_command("setfacl -b file1");
+ run_command("setfacl -k dir1");
+
+ second_snapshot();
+
+ undo();
+
+ check_undo_statistics(0, 2, 0);
+
+ // do not count ACLs
+ check_xa_undo_statistics(0, 0, 0);
+
+ check_undo_errors(0, 0, 0);
+
+ check_first();
+
+ cleanup();
+
+ exit(EXIT_SUCCESS);
+}
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org