s3: Fix the talloc hierarchy in shadow_copy2_connectpath
authorVolker Lendecke <vl@samba.org>
Mon, 14 Mar 2011 17:35:36 +0000 (18:35 +0100)
committerVolker Lendecke <vlendec@samba.org>
Mon, 14 Mar 2011 18:21:11 +0000 (19:21 +0100)
We have to return on talloc_tos() because we don't have a mem_ctx given to us.
So we have to create a separate temporary talloc context.

Autobuild-User: Volker Lendecke <vlendec@samba.org>
Autobuild-Date: Mon Mar 14 19:21:11 CET 2011 on sn-devel-104

source3/modules/vfs_shadow_copy2.c

index 93330f4b508b981745ac470c16a07651309cbb43..e3c3f9f3a06b8de3a85fcb8336e3badc0b205a98 100644 (file)
@@ -684,7 +684,7 @@ static char *shadow_copy2_realpath(vfs_handle_struct *handle,
 static const char *shadow_copy2_connectpath(struct vfs_handle_struct *handle,
                                            const char *fname)
 {
-       TALLOC_CTX *tmp_ctx = talloc_stackframe();
+       TALLOC_CTX *tmp_ctx;
        const char *snapdir, *baseoffset, *basedir, *gmt_start;
        size_t baselen;
        char *ret;
@@ -695,7 +695,14 @@ static const char *shadow_copy2_connectpath(struct vfs_handle_struct *handle,
                return handle->conn->connectpath;
        }
 
-       fname = shadow_copy2_normalise_path(talloc_tos(), fname, gmt_start);
+        /*
+         * We have to create a real temporary context because we have
+         * to put our result on talloc_tos(). Thus we can't use a
+         * talloc_stackframe() here.
+         */
+       tmp_ctx = talloc_new(talloc_tos());
+
+       fname = shadow_copy2_normalise_path(tmp_ctx, fname, gmt_start);
        if (fname == NULL) {
                TALLOC_FREE(tmp_ctx);
                return NULL;