[SCM] Samba Shared Repository - branch master updated
Volker Lendecke
vlendec at samba.org
Fri Jun 27 01:04:05 MDT 2014
The branch, master has been updated
via 9c19532 s3-shadow-copy2: Protect against already converted names
via 1d48827 s3-shadow-copy2: Add more debugs
via 87cad88 s3-shadow-copy2: Fix incorrect case submounts
via b053d4b s3-shadow-copy2: Remove TODO and fix comments
via 16a6181 s3-shadow-copy2: Fix dir/@GMT-2012.10.15-13.48.43 form of paths
via 68c7b33 s3-shadow-copy2: Add extreme debug output to shadow_copy2_strip_snapshot
via 064dd03 dbwrap: Print wait times with full precision
from b0f5fa4 smb2: Fix smb2_lease_state
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 9c195321345846195e465158f88dad5fd7699389
Author: Volker Lendecke <vl at samba.org>
Date: Thu Oct 18 15:24:39 2012 +0200
s3-shadow-copy2: Protect against already converted names
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Christof Schmitt <cs at samba.org>
Autobuild-User(master): Volker Lendecke <vl at samba.org>
Autobuild-Date(master): Fri Jun 27 09:03:53 CEST 2014 on sn-devel-104
commit 1d488270a116b3140de1355c1492aa2652a57e08
Author: Volker Lendecke <vl at samba.org>
Date: Wed Oct 17 12:11:37 2012 +0200
s3-shadow-copy2: Add more debugs
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Christof Schmitt <cs at samba.org>
commit 87cad882308a00330bdcba67bf048cdb0f7ab9d9
Author: Volker Lendecke <vl at samba.org>
Date: Wed Oct 17 12:08:26 2012 +0200
s3-shadow-copy2: Fix incorrect case submounts
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Christof Schmitt <cs at samba.org>
commit b053d4b3f9fd26f1ea4d81d3a4461a6f74bf7686
Author: Christof Schmitt <cs at samba.org>
Date: Thu Jun 26 12:43:03 2014 -0700
s3-shadow-copy2: Remove TODO and fix comments
The patch "s3-shadow-copy2: Fix dir/@GMT-2012.10.15-13.48.43 form of
paths" takes care of a case marked as TODO, remove it and adjust the
comments accordingly.
Signed-off-by: Christof Schmitt <cs at samba.org>
Reviewed-by: Volker Lendecke <vl at samba.org>
commit 16a6181289b719baeae7fae7fe0ba746fd5d41a6
Author: Volker Lendecke <vl at samba.org>
Date: Mon Oct 15 18:16:44 2012 +0200
s3-shadow-copy2: Fix dir/@GMT-2012.10.15-13.48.43 form of paths
The previous clause in shadow_copy2_strip_snapshot would only handle @GMT-
at the end of a pathname if it was the *only* pathname component. XP
seems to send @GMT- at the end under certain circumstances even with a
path prefix.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Christof Schmitt <cs at samba.org>
commit 68c7b339ccb02305a27b1192222537074efa0085
Author: Volker Lendecke <vl at samba.org>
Date: Mon Oct 15 18:13:33 2012 +0200
s3-shadow-copy2: Add extreme debug output to shadow_copy2_strip_snapshot
This is sooo hairy to debug when things go wrong :-(
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Christof Schmitt <cs at samba.org>
commit 064dd03223deb86e5baaadfc2f9b72dde829d995
Author: Volker Lendecke <vl at samba.org>
Date: Thu Mar 6 07:27:36 2014 +0100
dbwrap: Print wait times with full precision
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Christof Schmitt <cs at samba.org>
-----------------------------------------------------------------------
Summary of changes:
source3/lib/dbwrap/dbwrap_ctdb.c | 6 +-
source3/modules/vfs_shadow_copy2.c | 80 +++++++++++++++++++++++++++--------
2 files changed, 64 insertions(+), 22 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/lib/dbwrap/dbwrap_ctdb.c b/source3/lib/dbwrap/dbwrap_ctdb.c
index ca33c8f..0b30d9f 100644
--- a/source3/lib/dbwrap/dbwrap_ctdb.c
+++ b/source3/lib/dbwrap/dbwrap_ctdb.c
@@ -1168,15 +1168,15 @@ again:
DEBUG(0, ("db_ctdb_fetch_locked for %s key %s, chain %d "
"needed %d attempts, %d milliseconds, "
- "chainlock: %d ms, CTDB %d ms\n",
+ "chainlock: %f ms, CTDB %f ms\n",
tdb_name(ctx->wtdb->tdb),
hex_encode_talloc(talloc_tos(),
(unsigned char *)key.dptr,
key.dsize),
chain,
migrate_attempts, duration_msecs,
- (int) chainlock_time * 1000,
- (int) ctdb_time * 1000));
+ chainlock_time * 1000.0,
+ ctdb_time * 1000.0));
}
GetTimeOfDay(&crec->lock_time);
diff --git a/source3/modules/vfs_shadow_copy2.c b/source3/modules/vfs_shadow_copy2.c
index 30eaaa4..439df5d 100644
--- a/source3/modules/vfs_shadow_copy2.c
+++ b/source3/modules/vfs_shadow_copy2.c
@@ -235,6 +235,9 @@ static bool shadow_copy2_strip_snapshot(TALLOC_CTX *mem_ctx,
char *stripped;
size_t rest_len, dst_len;
struct shadow_copy2_config *config;
+ const char *snapdir;
+ ssize_t snapdirlen;
+ ptrdiff_t len_before_gmt;
SMB_VFS_HANDLE_GET_DATA(handle, config, struct shadow_copy2_config,
return false);
@@ -243,25 +246,60 @@ static bool shadow_copy2_strip_snapshot(TALLOC_CTX *mem_ctx,
p = strstr_m(name, "@GMT-");
if (p == NULL) {
+ DEBUG(11, ("@GMT not found\n"));
goto no_snapshot;
}
if ((p > name) && (p[-1] != '/')) {
/* the GMT-token does not start a path-component */
+ DEBUG(10, ("not at start, p=%p, name=%p, p[-1]=%d\n",
+ p, name, (int)p[-1]));
goto no_snapshot;
}
+
+ /*
+ * Figure out whether we got an already converted string. One
+ * case where this happens is in a smb2 create call with the
+ * mxac create blob set. We do the get_acl call on
+ * fsp->fsp_name, which is already converted. We are converted
+ * if we got a file name of the form ".snapshots/@GMT-",
+ * i.e. ".snapshots/" precedes "p".
+ */
+
+ snapdir = lp_parm_const_string(SNUM(handle->conn), "shadow", "snapdir",
+ ".snapshots");
+ snapdirlen = strlen(snapdir);
+ len_before_gmt = p - name;
+
+ if ((len_before_gmt >= (snapdirlen + 1)) && (p[-1] == '/')) {
+ const char *parent_snapdir = p - (snapdirlen+1);
+
+ DEBUG(10, ("parent_snapdir = %s\n", parent_snapdir));
+
+ if (strncmp(parent_snapdir, snapdir, snapdirlen) == 0) {
+ DEBUG(10, ("name=%s is already converted\n", name));
+ goto no_snapshot;
+ }
+ }
q = strptime(p, GMT_FORMAT, &tm);
if (q == NULL) {
+ DEBUG(10, ("strptime failed\n"));
goto no_snapshot;
}
tm.tm_isdst = -1;
timestamp = timegm(&tm);
if (timestamp == (time_t)-1) {
+ DEBUG(10, ("timestamp==-1\n"));
goto no_snapshot;
}
- if ((p == name) && (q[0] == '\0')) {
- /* the name consists of only the GMT token */
+ if (q[0] == '\0') {
+ /*
+ * The name consists of only the GMT token or the GMT
+ * token is at the end of the path. XP seems to send
+ * @GMT- at the end under certain circumstances even
+ * with a path prefix.
+ */
if (pstripped != NULL) {
- stripped = talloc_strdup(mem_ctx, "");
+ stripped = talloc_strndup(mem_ctx, name, p - name);
if (stripped == NULL) {
return false;
}
@@ -272,13 +310,10 @@ static bool shadow_copy2_strip_snapshot(TALLOC_CTX *mem_ctx,
}
if (q[0] != '/') {
/*
- * The GMT token is either at the end of the path
- * or it is not a complete path component, i.e. the
- * path component continues after the gmt-token.
- *
- * TODO: Is this correct? Or would the GMT tag as the
- * last component be a valid input?
+ * It is not a complete path component, i.e. the path
+ * component continues after the gmt-token.
*/
+ DEBUG(10, ("q[0] = %d\n", (int)q[0]));
goto no_snapshot;
}
q += 1;
@@ -301,6 +336,8 @@ static bool shadow_copy2_strip_snapshot(TALLOC_CTX *mem_ctx,
"insert string '%s'\n", name, insert));
have_insert = (strstr(name, insert+1) != NULL);
+ DEBUG(10, ("have_insert=%d, name=%s, insert+1=%s\n",
+ (int)have_insert, name, insert+1));
if (have_insert) {
DEBUG(10, (__location__ ": insert string '%s' found in "
"path '%s' found in snapdirseverywhere mode "
@@ -463,8 +500,12 @@ static char *shadow_copy2_convert(TALLOC_CTX *mem_ctx,
/* never reached ... */
}
- path = talloc_asprintf(mem_ctx, "%s/%s", handle->conn->connectpath,
- name);
+ if (name[0] == 0) {
+ path = talloc_strdup(mem_ctx, handle->conn->connectpath);
+ } else {
+ path = talloc_asprintf(
+ mem_ctx, "%s/%s", handle->conn->connectpath, name);
+ }
if (path == NULL) {
errno = ENOMEM;
goto fail;
@@ -1660,29 +1701,30 @@ static int shadow_copy2_get_real_filename(struct vfs_handle_struct *handle,
int saved_errno;
char *conv;
+ DEBUG(10, ("shadow_copy2_get_real_filename called for path=[%s], "
+ "name=[%s]\n", path, name));
+
if (!shadow_copy2_strip_snapshot(talloc_tos(), handle, path,
×tamp, &stripped)) {
+ DEBUG(10, ("shadow_copy2_strip_snapshot failed\n"));
return -1;
}
if (timestamp == 0) {
+ DEBUG(10, ("timestamp == 0\n"));
return SMB_VFS_NEXT_GET_REAL_FILENAME(handle, path, name,
mem_ctx, found_name);
}
- if (stripped[0] == '\0') {
- *found_name = talloc_strdup(mem_ctx, name);
- if (*found_name == NULL) {
- errno = ENOMEM;
- return -1;
- }
- return 0;
- }
conv = shadow_copy2_convert(talloc_tos(), handle, stripped, timestamp);
TALLOC_FREE(stripped);
if (conv == NULL) {
+ DEBUG(10, ("shadow_copy2_convert failed\n"));
return -1;
}
+ DEBUG(10, ("Calling NEXT_GET_REAL_FILE_NAME for conv=[%s], "
+ "name=[%s]\n", conv, name));
ret = SMB_VFS_NEXT_GET_REAL_FILENAME(handle, conv, name,
mem_ctx, found_name);
+ DEBUG(10, ("NEXT_REAL_FILE_NAME returned %d\n", (int)ret));
saved_errno = errno;
TALLOC_FREE(conv);
errno = saved_errno;
--
Samba Shared Repository
More information about the samba-cvs
mailing list