Hello community,

here is the log from the commit of package samba for openSUSE:Factory checked 
in at 2015-01-25 21:13:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/samba (Old)
 and      /work/SRC/openSUSE:Factory/.samba.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "samba"

Changes:
--------
--- /work/SRC/openSUSE:Factory/samba/samba.changes      2015-01-21 
21:56:26.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.samba.new/samba.changes 2015-01-25 
21:13:15.000000000 +0100
@@ -1,0 +2,19 @@
+Thu Jan 22 14:03:52 UTC 2015 - dd...@suse.com
+
+- Fix vfs_snapper DBus string handling; (bso#11055); (bnc#913238).
+
+-------------------------------------------------------------------
+Thu Jan 22 12:40:18 UTC 2015 - lmue...@suse.com
+
+- Update to 4.1.16.
+  + dsdb-samldb: Check for extended access rights before we allow changes to
+    userAccountControl; (bso#10993); CVE-2014-8143; (boo#914279).
+
+-------------------------------------------------------------------
+Mon Jan 19 17:15:19 UTC 2015 - dd...@suse.com
+
+- Fix libsmbclient DFS referral handling.
+  + Reuse connections derived from DFS referrals; (bso#10123); (fate#316512).
+  + Set domain/workgroup based on authentication callback value; (bso#11059).
+
+-------------------------------------------------------------------

Old:
----
  samba-4.1.15.tar.asc
  samba-4.1.15.tar.gz

New:
----
  samba-4.1.16.tar.asc
  samba-4.1.16.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ samba.spec ++++++
--- /var/tmp/diff_new_pack.JlVNQI/_old  2015-01-25 21:13:18.000000000 +0100
+++ /var/tmp/diff_new_pack.JlVNQI/_new  2015-01-25 21:13:18.000000000 +0100
@@ -122,7 +122,7 @@
 BuildRequires:  systemd
 BuildRequires:  systemd-devel
 %endif
-%define        samba_ver 4.1.15
+%define        samba_ver 4.1.16
 %define        samba_ver_suffix %nil
 %if "%{samba_ver_suffix}" == ""
 %define samba_source_location 
http://ftp.samba.org/pub/samba/stable/samba-%{version}.tar.gz
@@ -146,11 +146,11 @@
 %else
 %define        build_make_smp_mflags %{?jobs:-j%jobs}
 %endif
-%define SOURCE_TIMESTAMP 3346
+%define SOURCE_TIMESTAMP 3357
 %define BRANCH %{version}
 %global with_mitkrb5 1
 %global with_dc 0
-Version:        4.1.15
+Version:        4.1.16
 Release:        0
 Url:            http://www.samba.org/
 Provides:       samba-gplv3 = %{version}

++++++ patches.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches/samba.org/6c9de0cd056afc0b478c02f1bdb0e06532388037 
new/patches/samba.org/6c9de0cd056afc0b478c02f1bdb0e06532388037
--- old/patches/samba.org/6c9de0cd056afc0b478c02f1bdb0e06532388037      
1970-01-01 01:00:00.000000000 +0100
+++ new/patches/samba.org/6c9de0cd056afc0b478c02f1bdb0e06532388037      
2015-01-22 16:52:26.000000000 +0100
@@ -0,0 +1,78 @@
+From 86ec42a062e19e4290ed8ecb02059b00893dbc87 Mon Sep 17 00:00:00 2001
+From: David Disseldorp <dd...@samba.org>
+Date: Fri, 16 Jan 2015 16:21:23 +0100
+Subject: [PATCH 1/2] libsmb: provide authinfo domain for DFS referral auth
+
+libsmbclient uses the smbc_init->smbc_get_auth_data_fn() provided
+workgroup/domain in initial connections, but then switches to the
+default smb.conf workgroup/domain when handling DFS referrals.
+
+Bug: https://bugzilla.samba.org/show_bug.cgi?id=11059
+
+Signed-off-by: David Disseldorp <dd...@samba.org>
+Reviewed-by: Jeremy Allison <j...@samba.org>
+(cherry picked from commit 6c9de0cd056afc0b478c02f1bdb0e06532388037)
+[dd...@samba.org: 4.1 rebase with cli_init_creds() call]
+---
+ source3/libsmb/clidfs.c | 13 +++++++++----
+ 1 file changed, 9 insertions(+), 4 deletions(-)
+
+diff --git source3/libsmb/clidfs.c source3/libsmb/clidfs.c
+index 840084f..574000a 100644
+--- source3/libsmb/clidfs.c
++++ source3/libsmb/clidfs.c
+@@ -111,6 +111,7 @@ static NTSTATUS do_connect(TALLOC_CTX *ctx,
+       char *newserver, *newshare;
+       const char *username;
+       const char *password;
++      const char *domain;
+       NTSTATUS status;
+       int flags = 0;
+ 
+@@ -184,11 +185,15 @@ static NTSTATUS do_connect(TALLOC_CTX *ctx,
+ 
+       username = get_cmdline_auth_info_username(auth_info);
+       password = get_cmdline_auth_info_password(auth_info);
++      domain = get_cmdline_auth_info_domain(auth_info);
++      if ((domain == NULL) || (domain[0] == '\0')) {
++              domain = lp_workgroup();
++      }
+ 
+       status = cli_session_setup(c, username,
+                                  password, strlen(password),
+                                  password, strlen(password),
+-                                 lp_workgroup());
++                                 domain);
+       if (!NT_STATUS_IS_OK(status)) {
+               /* If a password was not supplied then
+                * try again with a null username. */
+@@ -209,7 +214,7 @@ static NTSTATUS do_connect(TALLOC_CTX *ctx,
+               d_printf("Anonymous login successful\n");
+               status = cli_init_creds(c, "", lp_workgroup(), "");
+       } else {
+-              status = cli_init_creds(c, username, lp_workgroup(), password);
++              status = cli_init_creds(c, username, domain, password);
+       }
+ 
+       if (!NT_STATUS_IS_OK(status)) {
+@@ -240,7 +245,7 @@ static NTSTATUS do_connect(TALLOC_CTX *ctx,
+                               force_encrypt,
+                               username,
+                               password,
+-                              lp_workgroup())) {
++                              domain)) {
+               cli_shutdown(c);
+               return do_connect(ctx, newserver,
+                               newshare, auth_info, false,
+@@ -262,7 +267,7 @@ static NTSTATUS do_connect(TALLOC_CTX *ctx,
+               status = cli_cm_force_encryption(c,
+                                       username,
+                                       password,
+-                                      lp_workgroup(),
++                                      domain,
+                                       sharename);
+               if (!NT_STATUS_IS_OK(status)) {
+                       cli_shutdown(c);
+-- 
+2.1.2
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches/samba.org/6da86012a2ca521efe0cf1bf05fcd04c3099b190 
new/patches/samba.org/6da86012a2ca521efe0cf1bf05fcd04c3099b190
--- old/patches/samba.org/6da86012a2ca521efe0cf1bf05fcd04c3099b190      
1970-01-01 01:00:00.000000000 +0100
+++ new/patches/samba.org/6da86012a2ca521efe0cf1bf05fcd04c3099b190      
2015-01-22 16:52:26.000000000 +0100
@@ -0,0 +1,37 @@
+From 71ff8aa547008a4fa9a7cae6df3e66e79b06c15f Mon Sep 17 00:00:00 2001
+From: David Disseldorp <dd...@samba.org>
+Date: Mon, 19 Jan 2015 13:39:35 +0100
+Subject: [PATCH 2/2] libsmb: provide authinfo domain for encrypted session
+ referrals
+
+6c9de0cd056afc0b478c02f1bdb0e06532388037 requires this extra change.
+
+Bug: https://bugzilla.samba.org/show_bug.cgi?id=11059
+
+Signed-off-by: David Disseldorp <dd...@samba.org>
+Reviewed-by: Jeremy Allison <j...@samba.org>
+
+Autobuild-User(master): Jeremy Allison <j...@samba.org>
+Autobuild-Date(master): Wed Jan 21 04:29:06 CET 2015 on sn-devel-104
+
+(cherry picked from commit 6da86012a2ca521efe0cf1bf05fcd04c3099b190)
+---
+ source3/libsmb/clidfs.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git source3/libsmb/clidfs.c source3/libsmb/clidfs.c
+index 574000a..c24afd1 100644
+--- source3/libsmb/clidfs.c
++++ source3/libsmb/clidfs.c
+@@ -1212,7 +1212,7 @@ bool cli_check_msdfs_proxy(TALLOC_CTX *ctx,
+               status = cli_cm_force_encryption(cli,
+                                       username,
+                                       password,
+-                                      lp_workgroup(),
++                                      domain,
+                                       "IPC$");
+               if (!NT_STATUS_IS_OK(status)) {
+                       return false;
+-- 
+2.1.2
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches/samba.org/7b7d4f740fe5017107d3100041cc8c7982f0eac7 
new/patches/samba.org/7b7d4f740fe5017107d3100041cc8c7982f0eac7
--- old/patches/samba.org/7b7d4f740fe5017107d3100041cc8c7982f0eac7      
1970-01-01 01:00:00.000000000 +0100
+++ new/patches/samba.org/7b7d4f740fe5017107d3100041cc8c7982f0eac7      
2015-01-22 16:52:26.000000000 +0100
@@ -0,0 +1,246 @@
+From 8529e0cffda5254838d7a4a9de4248d7d9e2d3fd Mon Sep 17 00:00:00 2001
+From: David Disseldorp <dd...@samba.org>
+Date: Fri, 16 Jan 2015 16:21:22 +0100
+Subject: [PATCH] libsmb: reuse connections derived from DFS referrals
+
+[MS-DFSC] 3.2.1.1 and 3.2.1.2 states that DFS targets with the same site
+location or relative cost are placed in random order in a DFS referral
+response.
+
+libsmbclient currently resolves DFS referrals on every API call, always
+using the first entry in the referral response. With random ordering,
+libsmbclient may open a new server connection, rather than reuse an
+existing (cached) connection established in a previous DFS referred API
+call.
+
+This change sees libsmbclient check the connection cache for any of the
+DFS referral response entries before creating a new connection.
+
+This change is based on a patch by Har Gagan Sahai
+<sharga...@novell.com>.
+
+Bug: https://bugzilla.samba.org/show_bug.cgi?id=10123
+
+Signed-off-by: David Disseldorp <dd...@samba.org>
+Reviewed-by: Jeremy Allison <j...@samba.org>
+(cherry picked from commit 7b7d4f740fe5017107d3100041cc8c7982f0eac7)
+---
+ source3/libsmb/clidfs.c | 103 +++++++++++++++++++++++++++++++++++++-----------
+ 1 file changed, 79 insertions(+), 24 deletions(-)
+
+diff --git source3/libsmb/clidfs.c source3/libsmb/clidfs.c
+index 840084f..a5f5991 100644
+--- source3/libsmb/clidfs.c
++++ source3/libsmb/clidfs.c
+@@ -837,6 +837,11 @@ NTSTATUS cli_dfs_get_referral(TALLOC_CTX *ctx,
+ 
+ /********************************************************************
+ ********************************************************************/
++struct cli_dfs_path_split {
++      char *server;
++      char *share;
++      char *extrapath;
++};
+ 
+ NTSTATUS cli_resolve_path(TALLOC_CTX *ctx,
+                         const char *mountpt,
+@@ -854,9 +859,9 @@ NTSTATUS cli_resolve_path(TALLOC_CTX *ctx,
+       char *cleanpath = NULL;
+       char *extrapath = NULL;
+       int pathlen;
+-      char *server = NULL;
+-      char *share = NULL;
+       struct cli_state *newcli = NULL;
++      struct cli_state *ccli = NULL;
++      int count = 0;
+       char *newpath = NULL;
+       char *newmount = NULL;
+       char *ppath = NULL;
+@@ -865,6 +870,7 @@ NTSTATUS cli_resolve_path(TALLOC_CTX *ctx,
+       NTSTATUS status;
+       struct smbXcli_tcon *root_tcon = NULL;
+       struct smbXcli_tcon *target_tcon = NULL;
++      struct cli_dfs_path_split *dfs_refs = NULL;
+ 
+       if ( !rootcli || !path || !targetcli ) {
+               return NT_STATUS_INVALID_PARAMETER;
+@@ -954,26 +960,83 @@ NTSTATUS cli_resolve_path(TALLOC_CTX *ctx,
+               return status;
+       }
+ 
+-      /* Just store the first referral for now. */
+-
+       if (!refs[0].dfspath) {
+               return NT_STATUS_NOT_FOUND;
+       }
+-      if (!split_dfs_path(ctx, refs[0].dfspath, &server, &share,
+-                          &extrapath)) {
+-              return NT_STATUS_NOT_FOUND;
++
++      /*
++       * Bug#10123 - DFS referal entries can be provided in a random order,
++       * so check the connection cache for each item to avoid unnecessary
++       * reconnections.
++       */
++      dfs_refs = talloc_array(ctx, struct cli_dfs_path_split, num_refs);
++      if (dfs_refs == NULL) {
++              return NT_STATUS_NO_MEMORY;
++      }
++
++      for (count = 0; count < num_refs; count++) {
++              if (!split_dfs_path(dfs_refs, refs[count].dfspath,
++                                  &dfs_refs[count].server,
++                                  &dfs_refs[count].share,
++                                  &dfs_refs[count].extrapath)) {
++                      TALLOC_FREE(dfs_refs);
++                      return NT_STATUS_NOT_FOUND;
++              }
++
++              ccli = cli_cm_find(rootcli, dfs_refs[count].server,
++                                 dfs_refs[count].share);
++              if (ccli != NULL) {
++                      extrapath = dfs_refs[count].extrapath;
++                      *targetcli = ccli;
++                      break;
++              }
++      }
++
++      /*
++       * If no cached connection was found, then connect to the first live
++       * referral server in the list.
++       */
++      for (count = 0; (ccli == NULL) && (count < num_refs); count++) {
++              /* Connect to the target server & share */
++              status = cli_cm_connect(ctx, rootcli,
++                              dfs_refs[count].server,
++                              dfs_refs[count].share,
++                              dfs_auth_info,
++                              false,
++                              smb1cli_conn_encryption_on(rootcli->conn),
++                              smbXcli_conn_protocol(rootcli->conn),
++                              0,
++                              0x20,
++                              targetcli);
++              if (!NT_STATUS_IS_OK(status)) {
++                      d_printf("Unable to follow dfs referral [\\%s\\%s]\n",
++                               dfs_refs[count].server,
++                               dfs_refs[count].share);
++                      continue;
++              } else {
++                      extrapath = dfs_refs[count].extrapath;
++                      break;
++              }
++      }
++
++      /* No available referral server for the connection */
++      if (*targetcli == NULL) {
++              TALLOC_FREE(dfs_refs);
++              return status;
+       }
+ 
+       /* Make sure to recreate the original string including any wildcards. */
+ 
+       dfs_path = cli_dfs_make_full_path(ctx, rootcli, path);
+       if (!dfs_path) {
++              TALLOC_FREE(dfs_refs);
+               return NT_STATUS_NO_MEMORY;
+       }
+       pathlen = strlen(dfs_path);
+       consumed = MIN(pathlen, consumed);
+       *pp_targetpath = talloc_strdup(ctx, &dfs_path[consumed]);
+       if (!*pp_targetpath) {
++              TALLOC_FREE(dfs_refs);
+               return NT_STATUS_NO_MEMORY;
+       }
+       dfs_path[consumed] = '\0';
+@@ -984,23 +1047,6 @@ NTSTATUS cli_resolve_path(TALLOC_CTX *ctx,
+        * (in \server\share\path format).
+        */
+ 
+-      /* Open the connection to the target server & share */
+-      status = cli_cm_open(ctx, rootcli,
+-                           server,
+-                           share,
+-                           dfs_auth_info,
+-                           false,
+-                           smb1cli_conn_encryption_on(rootcli->conn),
+-                           smbXcli_conn_protocol(rootcli->conn),
+-                           0,
+-                           0x20,
+-                           targetcli);
+-      if (!NT_STATUS_IS_OK(status)) {
+-              d_printf("Unable to follow dfs referral [\\%s\\%s]\n",
+-                      server, share );
+-              return status;
+-      }
+-
+       if (extrapath && strlen(extrapath) > 0) {
+               /* EMC Celerra NAS version 5.6.50 (at least) doesn't appear to 
*/
+               /* put the trailing \ on the path, so to be save we put one in 
if needed */
+@@ -1016,6 +1062,7 @@ NTSTATUS cli_resolve_path(TALLOC_CTX *ctx,
+                                                 *pp_targetpath);
+               }
+               if (!*pp_targetpath) {
++                      TALLOC_FREE(dfs_refs);
+                       return NT_STATUS_NO_MEMORY;
+               }
+       }
+@@ -1029,18 +1076,21 @@ NTSTATUS cli_resolve_path(TALLOC_CTX *ctx,
+               d_printf("cli_resolve_path: "
+                       "dfs_path (%s) not in correct format.\n",
+                       dfs_path );
++              TALLOC_FREE(dfs_refs);
+               return NT_STATUS_NOT_FOUND;
+       }
+ 
+       ppath++; /* Now pointing at start of server name. */
+ 
+       if ((ppath = strchr_m( dfs_path, '\\' )) == NULL) {
++              TALLOC_FREE(dfs_refs);
+               return NT_STATUS_NOT_FOUND;
+       }
+ 
+       ppath++; /* Now pointing at start of share name. */
+ 
+       if ((ppath = strchr_m( ppath+1, '\\' )) == NULL) {
++              TALLOC_FREE(dfs_refs);
+               return NT_STATUS_NOT_FOUND;
+       }
+ 
+@@ -1048,6 +1098,7 @@ NTSTATUS cli_resolve_path(TALLOC_CTX *ctx,
+ 
+       newmount = talloc_asprintf(ctx, "%s\\%s", mountpt, ppath );
+       if (!newmount) {
++              TALLOC_FREE(dfs_refs);
+               return NT_STATUS_NOT_FOUND;
+       }
+ 
+@@ -1072,6 +1123,7 @@ NTSTATUS cli_resolve_path(TALLOC_CTX *ctx,
+                        */
+                       *targetcli = newcli;
+                       *pp_targetpath = newpath;
++                      TALLOC_FREE(dfs_refs);
+                       return status;
+               }
+       }
+@@ -1088,14 +1140,17 @@ NTSTATUS cli_resolve_path(TALLOC_CTX *ctx,
+       if (smbXcli_tcon_is_dfs_share(target_tcon)) {
+               dfs_path = talloc_strdup(ctx, *pp_targetpath);
+               if (!dfs_path) {
++                      TALLOC_FREE(dfs_refs);
+                       return NT_STATUS_NO_MEMORY;
+               }
+               *pp_targetpath = cli_dfs_make_full_path(ctx, *targetcli, 
dfs_path);
+               if (*pp_targetpath == NULL) {
++                      TALLOC_FREE(dfs_refs);
+                       return NT_STATUS_NO_MEMORY;
+               }
+       }
+ 
++      TALLOC_FREE(dfs_refs);
+       return NT_STATUS_OK;
+ }
+ 
+-- 
+2.1.2
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/patches/series new/patches/series
--- old/patches/series  2015-01-13 13:51:09.000000000 +0100
+++ new/patches/series  2015-01-22 16:52:26.000000000 +0100
@@ -88,6 +88,9 @@
 samba.org/679c781112ce6b7cffca11c28e58ae5f9a0d717d -p0 # bso 10984
 samba.org/c9fccb5018f9a19bb654b9ad79aa716e37a274d6 -p0 # bso 10984
 samba.org/a11e97b79645ff0d9e7d20f5318a979194a858fe -p0 # bso 10984
+samba.org/7b7d4f740fe5017107d3100041cc8c7982f0eac7 -p0 # bso 10123, fate 316512
+samba.org/6c9de0cd056afc0b478c02f1bdb0e06532388037 -p0 # bso 11059
+samba.org/6da86012a2ca521efe0cf1bf05fcd04c3099b190 -p0 # bso 11059
 samba.org/fix_pc_dependencies.diff -p0
 
 # SuSE specific changes
@@ -153,6 +156,11 @@
 suse/0001-doc-prune-stale-and-sequence-timeout-fssd-parameters.patch -p0 # bnc 
876312
 suse/0001-fsrvp-don-t-store-or-retrieve-snums-with-server-stat.patch -p0 # bnc 
908627
 suse/0002-fsrvp-lookup-base-share-snums-at-runtime.patch -p0 # bnc 908627
+suse/0001-vfs_snapper-free-dbus-req-messages-in-error-paths.patch -p0 # bso 
11055, bnc 913238
+suse/0002-vfs_snapper-add-DBus-string-encoding-and-decoding-he.patch -p0 # bso 
11055, bnc 913238
+suse/0003-vfs_snapper-encode-and-decode-Snapper-DBus-strings.patch -p0 # bso 
11055, bnc 913238
+suse/0004-vfs_snapper-free-FSRVP-dbus-req-messages-in-error-pa.patch -p0 # bso 
11055, bnc 913238
+suse/0005-vfs_snapper-encode-and-decode-FSRVP-Snapper-DBus-str.patch -p0 # bso 
11055, bnc 913238
 suse/0001-allow-net-ads-join-accept-new-osServicePack-paramete.patch -p0 # bnc 
873922
 # this one should always live at the end and should be redone
 # diabled cf. 280452
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches/suse/0001-vfs_snapper-free-dbus-req-messages-in-error-paths.patch 
new/patches/suse/0001-vfs_snapper-free-dbus-req-messages-in-error-paths.patch
--- 
old/patches/suse/0001-vfs_snapper-free-dbus-req-messages-in-error-paths.patch   
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/patches/suse/0001-vfs_snapper-free-dbus-req-messages-in-error-paths.patch   
    2015-01-22 16:52:25.000000000 +0100
@@ -0,0 +1,45 @@
+From 13340f800818c3314969d9790163e0cfb8c72032 Mon Sep 17 00:00:00 2001
+From: David Disseldorp <dd...@samba.org>
+Date: Wed, 21 Jan 2015 18:16:55 +0100
+Subject: [PATCH 1/5] vfs_snapper: free dbus req messages in error paths
+
+Bug: https://bugzilla.samba.org/show_bug.cgi?id=11055
+
+Signed-off-by: David Disseldorp <dd...@samba.org>
+Reviewed-by: Jeremy Allison <j...@samba.org>
+---
+ source3/modules/vfs_snapper.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+Index: source3/modules/vfs_snapper.c
+===================================================================
+--- source3/modules/vfs_snapper.c.orig
++++ source3/modules/vfs_snapper.c
+@@ -482,6 +482,7 @@ static NTSTATUS snapper_list_snaps_pack(
+       dbus_message_iter_init_append(msg, &args);
+       if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING,
+                                           &snapper_conf)) {
++              dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+ 
+@@ -927,16 +928,19 @@ static NTSTATUS snapper_list_snaps_at_ti
+       dbus_message_iter_init_append(msg, &args);
+       if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING,
+                                           &snapper_conf)) {
++              dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+ 
+       if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_INT64,
+                                           &time_lower)) {
++              dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+ 
+       if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_INT64,
+                                           &time_upper)) {
++              dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+ 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches/suse/0002-vfs_snapper-add-DBus-string-encoding-and-decoding-he.patch
 
new/patches/suse/0002-vfs_snapper-add-DBus-string-encoding-and-decoding-he.patch
--- 
old/patches/suse/0002-vfs_snapper-add-DBus-string-encoding-and-decoding-he.patch
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/patches/suse/0002-vfs_snapper-add-DBus-string-encoding-and-decoding-he.patch
    2015-01-22 16:52:25.000000000 +0100
@@ -0,0 +1,156 @@
+From a2c0959fc276101eaa755228aec61b69275e8359 Mon Sep 17 00:00:00 2001
+From: David Disseldorp <dd...@samba.org>
+Date: Wed, 21 Jan 2015 18:16:56 +0100
+Subject: [PATCH 2/5] vfs_snapper: add DBus string encoding and decoding
+ helpers
+
+Snapper uses the following mechanism for encoding and decoding strings
+used in DBus traffic:
+Characters above 127 (0x7F - ASCII DEL) must be encoded hexadecimal as
+"\x??". As a consequence "\" must be encoded as "\\".
+
+This change adds string encoding and decoding helpers to vfs_snapper.
+
+Bug: https://bugzilla.samba.org/show_bug.cgi?id=11055
+
+Signed-off-by: David Disseldorp <dd...@samba.org>
+Reviewed-by: Jeremy Allison <j...@samba.org>
+---
+ source3/modules/vfs_snapper.c | 124 ++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 124 insertions(+)
+
+Index: source3/modules/vfs_snapper.c
+===================================================================
+--- source3/modules/vfs_snapper.c.orig
++++ source3/modules/vfs_snapper.c
+@@ -90,6 +90,130 @@ static NTSTATUS snapper_err_ntstatus_map
+       return NT_STATUS_UNSUCCESSFUL;
+ }
+ 
++/*
++ * Strings are UTF-8. Other characters must be encoded hexadecimal as "\x??".
++ * As a consequence "\" must be encoded as "\\".
++ */
++static NTSTATUS snapper_dbus_str_encode(TALLOC_CTX *mem_ctx, const char 
*in_str,
++                                      char **_out_str)
++{
++      size_t in_len;
++      char *out_str;
++      int i;
++      int out_off;
++      int out_len;
++
++      if (in_str == NULL) {
++              return NT_STATUS_INVALID_PARAMETER;
++      }
++
++      in_len = strlen(in_str);
++
++      /* output can be max 4 times the length of @in_str, +1 for terminator */
++      out_len = (in_len * 4) + 1;
++
++      out_str = talloc_array(mem_ctx, char, out_len);
++      if (out_str == NULL) {
++              return NT_STATUS_NO_MEMORY;
++      }
++
++      out_off = 0;
++      for (i = 0; i < in_len; i++) {
++              size_t pushed;
++
++              if (in_str[i] == '\\') {
++                      pushed = snprintf(out_str + out_off, out_len - out_off,
++                                        "\\\\");
++              } else if ((unsigned char)in_str[i] > 127) {
++                      pushed = snprintf(out_str + out_off, out_len - out_off,
++                                        "\\x%02x", (unsigned char)in_str[i]);
++              } else {
++                      /* regular character */
++                      *(out_str + out_off) = in_str[i];
++                      pushed = sizeof(char);
++              }
++              if (pushed >= out_len - out_off) {
++                      /* truncated, should never happen */
++                      talloc_free(out_str);
++                      return NT_STATUS_INTERNAL_ERROR;
++              }
++              out_off += pushed;
++      }
++
++      *(out_str + out_off) = '\0';
++      *_out_str = out_str;
++
++      return NT_STATUS_OK;
++}
++
++static NTSTATUS snapper_dbus_str_decode(TALLOC_CTX *mem_ctx, const char 
*in_str,
++                                      char **_out_str)
++{
++      size_t in_len;
++      char *out_str;
++      int i;
++      int out_off;
++      int out_len;
++
++      if (in_str == NULL) {
++              return NT_STATUS_INVALID_PARAMETER;
++      }
++
++      in_len = strlen(in_str);
++
++      /* output cannot be larger than input, +1 for terminator */
++      out_len = in_len + 1;
++
++      out_str = talloc_array(mem_ctx, char, out_len);
++      if (out_str == NULL) {
++              return NT_STATUS_NO_MEMORY;
++      }
++
++      out_off = 0;
++      for (i = 0; i < in_len; i++) {
++              int j;
++              char hex_buf[3];
++              unsigned int non_ascii_byte;
++
++              if (in_str[i] != '\\') {
++                      out_str[out_off] = in_str[i];
++                      out_off++;
++                      continue;
++              }
++
++              i++;
++              if (in_str[i] == '\\') {
++                      out_str[out_off] = '\\';
++                      out_off++;
++                      continue;
++              } else if (in_str[i] != 'x') {
++                      goto err_invalid_src_encoding;
++              }
++
++              /* non-ASCII, encoded as two hex chars */
++              for (j = 0; j < 2; j++) {
++                      i++;
++                      if ((in_str[i] == '\0') || !isxdigit(in_str[i])) {
++                              goto err_invalid_src_encoding;
++                      }
++                      hex_buf[j] = in_str[i];
++              }
++              hex_buf[2] = '\0';
++
++              sscanf(hex_buf, "%x", &non_ascii_byte);
++              out_str[out_off] = (unsigned char)non_ascii_byte;
++              out_off++;
++      }
++
++      out_str[out_off] = '\0';
++      *_out_str = out_str;
++
++      return NT_STATUS_OK;
++err_invalid_src_encoding:
++      DEBUG(0, ("invalid encoding %s\n", in_str));
++      return NT_STATUS_INVALID_PARAMETER;
++}
++
+ static DBusConnection *snapper_dbus_conn_create(void)
+ {
+       DBusError err;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches/suse/0003-vfs_snapper-encode-and-decode-Snapper-DBus-strings.patch 
new/patches/suse/0003-vfs_snapper-encode-and-decode-Snapper-DBus-strings.patch
--- 
old/patches/suse/0003-vfs_snapper-encode-and-decode-Snapper-DBus-strings.patch  
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/patches/suse/0003-vfs_snapper-encode-and-decode-Snapper-DBus-strings.patch  
    2015-01-22 16:52:25.000000000 +0100
@@ -0,0 +1,292 @@
+From 80762bf75f4fe9e234a5f055802ce7c548f2df4c Mon Sep 17 00:00:00 2001
+From: David Disseldorp <dd...@samba.org>
+Date: Wed, 21 Jan 2015 18:16:57 +0100
+Subject: [PATCH 3/5] vfs_snapper: encode and decode Snapper DBus strings
+
+Snapper uses a special character encoding for strings used in DBus
+requests and responses. This change ensures that Samba packs and unpacks
+strings in the corresponding format, using the previously added
+encode/decode helper functions.
+
+Bug: https://bugzilla.samba.org/show_bug.cgi?id=11055
+
+Signed-off-by: David Disseldorp <dd...@samba.org>
+Reviewed-by: Jeremy Allison <j...@samba.org>
+---
+ source3/modules/vfs_snapper.c | 110 ++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 94 insertions(+), 16 deletions(-)
+
+Index: source3/modules/vfs_snapper.c
+===================================================================
+--- source3/modules/vfs_snapper.c.orig
++++ source3/modules/vfs_snapper.c
+@@ -318,12 +318,15 @@ static NTSTATUS snapper_type_check_get(D
+       return NT_STATUS_OK;
+ }
+ 
+-static NTSTATUS snapper_dict_unpack(DBusMessageIter *iter,
++static NTSTATUS snapper_dict_unpack(TALLOC_CTX *mem_ctx,
++                                  DBusMessageIter *iter,
+                                   struct snapper_dict *dict_out)
+ 
+ {
+       NTSTATUS status;
+       DBusMessageIter dct_iter;
++      char *key_encoded;
++      char *val_encoded;
+ 
+       status = snapper_type_check(iter, DBUS_TYPE_DICT_ENTRY);
+       if (!NT_STATUS_IS_OK(status)) {
+@@ -332,15 +335,25 @@ static NTSTATUS snapper_dict_unpack(DBus
+       dbus_message_iter_recurse(iter, &dct_iter);
+ 
+       status = snapper_type_check_get(&dct_iter, DBUS_TYPE_STRING,
+-                                      &dict_out->key);
++                                      &key_encoded);
++      if (!NT_STATUS_IS_OK(status)) {
++              return status;
++      }
++      status = snapper_dbus_str_decode(mem_ctx, key_encoded, &dict_out->key);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+ 
+       dbus_message_iter_next(&dct_iter);
+       status = snapper_type_check_get(&dct_iter, DBUS_TYPE_STRING,
+-                                      &dict_out->val);
++                                      &val_encoded);
++      if (!NT_STATUS_IS_OK(status)) {
++              talloc_free(dict_out->key);
++              return status;
++      }
++      status = snapper_dbus_str_decode(mem_ctx, val_encoded, &dict_out->val);
+       if (!NT_STATUS_IS_OK(status)) {
++              talloc_free(dict_out->key);
+               return status;
+       }
+ 
+@@ -383,7 +396,7 @@ static NTSTATUS snapper_dict_array_unpac
+               if (dicts == NULL)
+                       abort();
+ 
+-              status = snapper_dict_unpack(&array_iter,
++              status = snapper_dict_unpack(mem_ctx, &array_iter,
+                                            &dicts[num_dicts - 1]);
+               if (!NT_STATUS_IS_OK(status)) {
+                       talloc_free(dicts);
+@@ -423,6 +436,8 @@ static NTSTATUS snapper_conf_unpack(TALL
+ {
+       NTSTATUS status;
+       DBusMessageIter st_iter;
++      char *name_encoded;
++      char *mnt_encoded;
+ 
+       status = snapper_type_check(iter, DBUS_TYPE_STRUCT);
+       if (!NT_STATUS_IS_OK(status)) {
+@@ -431,15 +446,29 @@ static NTSTATUS snapper_conf_unpack(TALL
+       dbus_message_iter_recurse(iter, &st_iter);
+ 
+       status = snapper_type_check_get(&st_iter, DBUS_TYPE_STRING,
+-                                      &conf_out->name);
++                                      &name_encoded);
++      if (!NT_STATUS_IS_OK(status)) {
++              return status;
++      }
++
++      status = snapper_dbus_str_decode(mem_ctx, name_encoded,
++                                       &conf_out->name);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+ 
+       dbus_message_iter_next(&st_iter);
+       status = snapper_type_check_get(&st_iter, DBUS_TYPE_STRING,
+-                                      &conf_out->mnt);
++                                      &mnt_encoded);
+       if (!NT_STATUS_IS_OK(status)) {
++              talloc_free(conf_out->name);
++              return status;
++      }
++
++      status = snapper_dbus_str_decode(mem_ctx, mnt_encoded,
++                                       &conf_out->mnt);
++      if (!NT_STATUS_IS_OK(status)) {
++              talloc_free(conf_out->name);
+               return status;
+       }
+ 
+@@ -447,8 +476,13 @@ static NTSTATUS snapper_conf_unpack(TALL
+       status = snapper_dict_array_unpack(mem_ctx, &st_iter,
+                                          &conf_out->num_attrs,
+                                          &conf_out->attrs);
++      if (!NT_STATUS_IS_OK(status)) {
++              talloc_free(conf_out->mnt);
++              talloc_free(conf_out->name);
++              return status;
++      }
+ 
+-      return status;
++      return NT_STATUS_OK;
+ }
+ 
+ static void snapper_conf_array_free(int32_t num_confs,
+@@ -587,11 +621,14 @@ static NTSTATUS snapper_list_confs_unpac
+       return NT_STATUS_OK;
+ }
+ 
+-static NTSTATUS snapper_list_snaps_pack(char *snapper_conf,
++static NTSTATUS snapper_list_snaps_pack(TALLOC_CTX *mem_ctx,
++                                      char *snapper_conf,
+                                       DBusMessage **req_msg_out)
+ {
+       DBusMessage *msg;
+       DBusMessageIter args;
++      char *conf_encoded;
++      NTSTATUS status;
+ 
+       msg = dbus_message_new_method_call("org.opensuse.Snapper", /* target 
for the method call */
+                                          "/org/opensuse/Snapper", /* object 
to call on */
+@@ -602,10 +639,17 @@ static NTSTATUS snapper_list_snaps_pack(
+               return NT_STATUS_NO_MEMORY;
+       }
+ 
++      status = snapper_dbus_str_encode(mem_ctx, snapper_conf, &conf_encoded);
++      if (!NT_STATUS_IS_OK(status)) {
++              dbus_message_unref(msg);
++              return status;
++      }
++
+       /* append arguments */
+       dbus_message_iter_init_append(msg, &args);
+       if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING,
+-                                          &snapper_conf)) {
++                                          &conf_encoded)) {
++              talloc_free(conf_encoded);
+               dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+@@ -621,6 +665,8 @@ static NTSTATUS snapper_snap_struct_unpa
+ {
+       NTSTATUS status;
+       DBusMessageIter st_iter;
++      char *desc_encoded;
++      char *cleanup_encoded;
+ 
+       status = snapper_type_check(iter, DBUS_TYPE_STRUCT);
+       if (!NT_STATUS_IS_OK(status)) {
+@@ -664,15 +710,29 @@ static NTSTATUS snapper_snap_struct_unpa
+ 
+       dbus_message_iter_next(&st_iter);
+       status = snapper_type_check_get(&st_iter, DBUS_TYPE_STRING,
+-                                      &snap_out->desc);
++                                      &desc_encoded);
++      if (!NT_STATUS_IS_OK(status)) {
++              return status;
++      }
++
++      status = snapper_dbus_str_decode(mem_ctx, desc_encoded,
++                                       &snap_out->desc);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+ 
+       dbus_message_iter_next(&st_iter);
+       status = snapper_type_check_get(&st_iter, DBUS_TYPE_STRING,
+-                                      &snap_out->cleanup);
++                                      &cleanup_encoded);
++      if (!NT_STATUS_IS_OK(status)) {
++              talloc_free(snap_out->desc);
++              return status;
++      }
++
++      status = snapper_dbus_str_decode(mem_ctx, cleanup_encoded,
++                                       &snap_out->cleanup);
+       if (!NT_STATUS_IS_OK(status)) {
++              talloc_free(snap_out->desc);
+               return status;
+       }
+ 
+@@ -680,8 +740,13 @@ static NTSTATUS snapper_snap_struct_unpa
+       status = snapper_dict_array_unpack(mem_ctx, &st_iter,
+                                          &snap_out->num_user_data,
+                                          &snap_out->user_data);
++      if (!NT_STATUS_IS_OK(status)) {
++              talloc_free(snap_out->cleanup);
++              talloc_free(snap_out->desc);
++              return status;
++      }
+ 
+-      return status;
++      return NT_STATUS_OK;
+ }
+ 
+ static void snapper_snap_array_free(int32_t num_snaps,
+@@ -1032,13 +1097,16 @@ static NTSTATUS snapper_del_snap_unpack(
+       return NT_STATUS_OK;
+ }
+ 
+-static NTSTATUS snapper_list_snaps_at_time_pack(const char *snapper_conf,
++static NTSTATUS snapper_list_snaps_at_time_pack(TALLOC_CTX *mem_ctx,
++                                              const char *snapper_conf,
+                                               time_t time_lower,
+                                               time_t time_upper,
+                                               DBusMessage **req_msg_out)
+ {
+       DBusMessage *msg;
+       DBusMessageIter args;
++      char *conf_encoded;
++      NTSTATUS status;
+ 
+       msg = dbus_message_new_method_call("org.opensuse.Snapper",
+                                          "/org/opensuse/Snapper",
+@@ -1049,21 +1117,30 @@ static NTSTATUS snapper_list_snaps_at_ti
+               return NT_STATUS_NO_MEMORY;
+       }
+ 
++      status = snapper_dbus_str_encode(mem_ctx, snapper_conf, &conf_encoded);
++      if (!NT_STATUS_IS_OK(status)) {
++              dbus_message_unref(msg);
++              return status;
++      }
++
+       dbus_message_iter_init_append(msg, &args);
+       if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING,
+-                                          &snapper_conf)) {
++                                          &conf_encoded)) {
++              talloc_free(conf_encoded);
+               dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+ 
+       if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_INT64,
+                                           &time_lower)) {
++              talloc_free(conf_encoded);
+               dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+ 
+       if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_INT64,
+                                           &time_upper)) {
++              talloc_free(conf_encoded);
+               dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+@@ -1547,7 +1624,7 @@ static int snapper_get_shadow_copy_data(
+               goto err_conn_free;
+       }
+ 
+-      status = snapper_list_snaps_pack(conf_name, &req_msg);
++      status = snapper_list_snaps_pack(tmp_ctx, conf_name, &req_msg);
+       if (!NT_STATUS_IS_OK(status)) {
+               goto err_conn_free;
+       }
+@@ -1715,7 +1792,8 @@ static NTSTATUS snapper_get_snap_at_time
+       struct snapper_snap *snaps;
+       char *snap_path;
+ 
+-      status = snapper_list_snaps_at_time_pack(conf_name,
++      status = snapper_list_snaps_at_time_pack(mem_ctx,
++                                               conf_name,
+                                                snaptime,
+                                                snaptime,
+                                                &req_msg);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches/suse/0004-vfs_snapper-free-FSRVP-dbus-req-messages-in-error-pa.patch
 
new/patches/suse/0004-vfs_snapper-free-FSRVP-dbus-req-messages-in-error-pa.patch
--- 
old/patches/suse/0004-vfs_snapper-free-FSRVP-dbus-req-messages-in-error-pa.patch
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/patches/suse/0004-vfs_snapper-free-FSRVP-dbus-req-messages-in-error-pa.patch
    2015-01-22 16:52:26.000000000 +0100
@@ -0,0 +1,107 @@
+From 934e4ade085b55bccac988fb6bb45e230f189c80 Mon Sep 17 00:00:00 2001
+From: David Disseldorp <dd...@samba.org>
+Date: Wed, 21 Jan 2015 12:00:14 +0100
+Subject: [PATCH 4/5] vfs_snapper: free FSRVP dbus req messages in error paths
+
+Bug: https://bugzilla.samba.org/show_bug.cgi?id=11055
+
+Signed-off-by: David Disseldorp <dd...@samba.org>
+---
+ source3/modules/vfs_snapper.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+Index: source3/modules/vfs_snapper.c
+===================================================================
+--- source3/modules/vfs_snapper.c.orig
++++ source3/modules/vfs_snapper.c
+@@ -912,12 +912,14 @@ static NTSTATUS snapper_create_snap_pack
+       ok = dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING,
+                                           &snapper_conf);
+       if (!ok) {
++              dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+ 
+       ok = dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING,
+                                           &desc);
+       if (!ok) {
++              dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+ 
+@@ -925,6 +927,7 @@ static NTSTATUS snapper_create_snap_pack
+       ok = dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING,
+                                           &empty);
+       if (!ok) {
++              dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+ 
+@@ -932,6 +935,7 @@ static NTSTATUS snapper_create_snap_pack
+                                             SNAPPER_SIG_STRING_DICT,
+                                             &array_iter);
+       if (!ok) {
++              dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+ 
+@@ -940,6 +944,7 @@ static NTSTATUS snapper_create_snap_pack
+                                                     DBUS_TYPE_DICT_ENTRY,
+                                                     NULL, &struct_iter);
+               if (!ok) {
++                      dbus_message_unref(msg);
+                       return NT_STATUS_NO_MEMORY;
+               }
+ 
+@@ -947,23 +952,27 @@ static NTSTATUS snapper_create_snap_pack
+                                                   DBUS_TYPE_STRING,
+                                                   &user_data[i].key);
+               if (!ok) {
++                      dbus_message_unref(msg);
+                       return NT_STATUS_NO_MEMORY;
+               }
+               ok = dbus_message_iter_append_basic(&struct_iter,
+                                                   DBUS_TYPE_STRING,
+                                                   &user_data[i].val);
+               if (!ok) {
++                      dbus_message_unref(msg);
+                       return NT_STATUS_NO_MEMORY;
+               }
+ 
+               ok = dbus_message_iter_close_container(&array_iter, 
&struct_iter);
+               if (!ok) {
++                      dbus_message_unref(msg);
+                       return NT_STATUS_NO_MEMORY;
+               }
+       }
+ 
+       ok = dbus_message_iter_close_container(&args, &array_iter);
+       if (!ok) {
++              dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+ 
+@@ -1042,6 +1051,7 @@ static NTSTATUS snapper_del_snap_pack(co
+       ok = dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING,
+                                           &snapper_conf);
+       if (!ok) {
++              dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+ 
+@@ -1049,6 +1059,7 @@ static NTSTATUS snapper_del_snap_pack(co
+                                              DBUS_TYPE_UINT32_AS_STRING,
+                                              &array_iter);
+       if (!ok) {
++              dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+ 
+@@ -1056,6 +1067,7 @@ static NTSTATUS snapper_del_snap_pack(co
+                                           DBUS_TYPE_UINT32,
+                                           &snap_id);
+       if (!ok) {
++              dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+ 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/patches/suse/0005-vfs_snapper-encode-and-decode-FSRVP-Snapper-DBus-str.patch
 
new/patches/suse/0005-vfs_snapper-encode-and-decode-FSRVP-Snapper-DBus-str.patch
--- 
old/patches/suse/0005-vfs_snapper-encode-and-decode-FSRVP-Snapper-DBus-str.patch
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/patches/suse/0005-vfs_snapper-encode-and-decode-FSRVP-Snapper-DBus-str.patch
    2015-01-22 16:52:26.000000000 +0100
@@ -0,0 +1,235 @@
+From 83bec9c7f11a3b5b0018dfa17f0dddfda4f5ff55 Mon Sep 17 00:00:00 2001
+From: David Disseldorp <dd...@samba.org>
+Date: Wed, 21 Jan 2015 13:08:55 +0100
+Subject: [PATCH 5/5] vfs_snapper: encode and decode FSRVP Snapper DBus strings
+
+Bug: https://bugzilla.samba.org/show_bug.cgi?id=11055
+
+Signed-off-by: David Disseldorp <dd...@samba.org>
+---
+ source3/modules/vfs_snapper.c | 82 +++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 72 insertions(+), 10 deletions(-)
+
+Index: source3/modules/vfs_snapper.c
+===================================================================
+--- source3/modules/vfs_snapper.c.orig
++++ source3/modules/vfs_snapper.c
+@@ -881,7 +881,8 @@ static NTSTATUS snapper_list_snaps_unpac
+       return NT_STATUS_OK;
+ }
+ 
+-static NTSTATUS snapper_create_snap_pack(const char *snapper_conf,
++static NTSTATUS snapper_create_snap_pack(TALLOC_CTX *mem_ctx,
++                                       const char *snapper_conf,
+                                        const char *desc,
+                                        uint32_t num_user_data,
+                                        struct snapper_dict *user_data,
+@@ -892,12 +893,20 @@ static NTSTATUS snapper_create_snap_pack
+       DBusMessageIter array_iter;
+       DBusMessageIter struct_iter;
+       const char *empty = "";
++      char *str_encoded;
+       uint32_t i;
+       bool ok;
++      TALLOC_CTX *enc_ctx;
++      NTSTATUS status;
+ 
+       DEBUG(10, ("CreateSingleSnapshot: %s, %s, %s, num user %u\n",
+                 snapper_conf, desc, empty, num_user_data));
+ 
++      enc_ctx = talloc_new(mem_ctx);
++      if (enc_ctx == NULL) {
++              return NT_STATUS_NO_MEMORY;
++      }
++
+       msg = dbus_message_new_method_call("org.opensuse.Snapper",
+                                          "/org/opensuse/Snapper",
+                                          "org.opensuse.Snapper",
+@@ -907,26 +916,43 @@ static NTSTATUS snapper_create_snap_pack
+               return NT_STATUS_NO_MEMORY;
+       }
+ 
++      status = snapper_dbus_str_encode(enc_ctx, snapper_conf, &str_encoded);
++      if (!NT_STATUS_IS_OK(status)) {
++              talloc_free(enc_ctx);
++              dbus_message_unref(msg);
++              return status;
++      }
++
+       /* append arguments */
+       dbus_message_iter_init_append(msg, &args);
+       ok = dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING,
+-                                          &snapper_conf);
++                                          &str_encoded);
+       if (!ok) {
++              talloc_free(enc_ctx);
+               dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+ 
++      status = snapper_dbus_str_encode(enc_ctx, desc, &str_encoded);
++      if (!NT_STATUS_IS_OK(status)) {
++              talloc_free(enc_ctx);
++              dbus_message_unref(msg);
++              return status;
++      }
++
+       ok = dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING,
+-                                          &desc);
++                                          &str_encoded);
+       if (!ok) {
++              talloc_free(enc_ctx);
+               dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+ 
+-      /* cleanup */
++      /* cleanup - no need to encode empty string */
+       ok = dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING,
+                                           &empty);
+       if (!ok) {
++              talloc_free(enc_ctx);
+               dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+@@ -935,6 +961,7 @@ static NTSTATUS snapper_create_snap_pack
+                                             SNAPPER_SIG_STRING_DICT,
+                                             &array_iter);
+       if (!ok) {
++              talloc_free(enc_ctx);
+               dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+@@ -944,27 +971,48 @@ static NTSTATUS snapper_create_snap_pack
+                                                     DBUS_TYPE_DICT_ENTRY,
+                                                     NULL, &struct_iter);
+               if (!ok) {
++                      talloc_free(enc_ctx);
+                       dbus_message_unref(msg);
+                       return NT_STATUS_NO_MEMORY;
+               }
+ 
++              status = snapper_dbus_str_encode(enc_ctx, user_data[i].key,
++                                               &str_encoded);
++              if (!NT_STATUS_IS_OK(status)) {
++                      talloc_free(enc_ctx);
++                      dbus_message_unref(msg);
++                      return status;
++              }
++
+               ok = dbus_message_iter_append_basic(&struct_iter,
+                                                   DBUS_TYPE_STRING,
+-                                                  &user_data[i].key);
++                                                  &str_encoded);
+               if (!ok) {
++                      talloc_free(enc_ctx);
+                       dbus_message_unref(msg);
+                       return NT_STATUS_NO_MEMORY;
+               }
++
++              status = snapper_dbus_str_encode(enc_ctx, user_data[i].val,
++                                               &str_encoded);
++              if (!NT_STATUS_IS_OK(status)) {
++                      talloc_free(enc_ctx);
++                      dbus_message_unref(msg);
++                      return status;
++              }
++
+               ok = dbus_message_iter_append_basic(&struct_iter,
+                                                   DBUS_TYPE_STRING,
+-                                                  &user_data[i].val);
++                                                  &str_encoded);
+               if (!ok) {
++                      talloc_free(enc_ctx);
+                       dbus_message_unref(msg);
+                       return NT_STATUS_NO_MEMORY;
+               }
+ 
+               ok = dbus_message_iter_close_container(&array_iter, 
&struct_iter);
+               if (!ok) {
++                      talloc_free(enc_ctx);
+                       dbus_message_unref(msg);
+                       return NT_STATUS_NO_MEMORY;
+               }
+@@ -972,6 +1020,7 @@ static NTSTATUS snapper_create_snap_pack
+ 
+       ok = dbus_message_iter_close_container(&args, &array_iter);
+       if (!ok) {
++              talloc_free(enc_ctx);
+               dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+@@ -1028,14 +1077,17 @@ static NTSTATUS snapper_create_snap_unpa
+       return NT_STATUS_OK;
+ }
+ 
+-static NTSTATUS snapper_del_snap_pack(const char *snapper_conf,
++static NTSTATUS snapper_del_snap_pack(TALLOC_CTX *mem_ctx,
++                                    const char *snapper_conf,
+                                     uint32_t snap_id,
+                                     DBusMessage **req_msg_out)
+ {
+       DBusMessage *msg;
+       DBusMessageIter args;
+       DBusMessageIter array_iter;
++      char *conf_encoded;
+       bool ok;
++      NTSTATUS status;
+ 
+       msg = dbus_message_new_method_call("org.opensuse.Snapper",
+                                          "/org/opensuse/Snapper",
+@@ -1046,11 +1098,18 @@ static NTSTATUS snapper_del_snap_pack(co
+               return NT_STATUS_NO_MEMORY;
+       }
+ 
++      status = snapper_dbus_str_encode(mem_ctx, snapper_conf, &conf_encoded);
++      if (!NT_STATUS_IS_OK(status)) {
++              dbus_message_unref(msg);
++              return status;
++      }
++
+       /* append arguments */
+       dbus_message_iter_init_append(msg, &args);
+       ok = dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING,
+-                                          &snapper_conf);
++                                          &conf_encoded);
+       if (!ok) {
++              talloc_free(conf_encoded);
+               dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+@@ -1059,6 +1118,7 @@ static NTSTATUS snapper_del_snap_pack(co
+                                              DBUS_TYPE_UINT32_AS_STRING,
+                                              &array_iter);
+       if (!ok) {
++              talloc_free(conf_encoded);
+               dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+@@ -1067,6 +1127,7 @@ static NTSTATUS snapper_del_snap_pack(co
+                                           DBUS_TYPE_UINT32,
+                                           &snap_id);
+       if (!ok) {
++              talloc_free(conf_encoded);
+               dbus_message_unref(msg);
+               return NT_STATUS_NO_MEMORY;
+       }
+@@ -1364,7 +1425,8 @@ static NTSTATUS snapper_create_snap_call
+       uint32_t snap_id;
+       char *snap_path;
+ 
+-      status = snapper_create_snap_pack(conf_name,
++      status = snapper_create_snap_pack(mem_ctx,
++                                        conf_name,
+                                         snap_desc,
+                                         num_user_data,
+                                         user_data,
+@@ -1491,7 +1553,7 @@ static NTSTATUS snapper_delete_snap_call
+       DBusMessage *req_msg;
+       DBusMessage *rsp_msg;
+ 
+-      status = snapper_del_snap_pack(conf_name, snap_id, &req_msg);
++      status = snapper_del_snap_pack(mem_ctx, conf_name, snap_id, &req_msg);
+       if (!NT_STATUS_IS_OK(status)) {
+               goto err_out;
+       }

++++++ samba-4.1.15.tar.gz -> samba-4.1.16.tar.gz ++++++
/work/SRC/openSUSE:Factory/samba/samba-4.1.15.tar.gz 
/work/SRC/openSUSE:Factory/.samba.new/samba-4.1.16.tar.gz differ: char 5, line 1

++++++ vendor-files.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor-files/tools/package-data 
new/vendor-files/tools/package-data
--- old/vendor-files/tools/package-data 2015-01-14 13:38:08.000000000 +0100
+++ new/vendor-files/tools/package-data 2015-01-22 16:56:57.000000000 +0100
@@ -1,2 +1,2 @@
 # This is an autogenrated file.
-SAMBA_PACKAGE_SVN_VERSION="3346"
+SAMBA_PACKAGE_SVN_VERSION="3357"

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to