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