1
0
mirror of https://github.com/samba-team/samba.git synced 2025-08-03 04:22:09 +03:00

s3-vfs: Try to be consistent about localtime vs GMT handling in vfs_shadow_copy2

With the ability to handle times a abolute time_t values since 1970
this becomes more important to get absolutly correct.

Andrew Bartlett
This commit is contained in:
Andrew Bartlett
2012-07-02 22:31:49 +10:00
parent de209587f9
commit f2ccff7b06

View File

@ -150,27 +150,34 @@ static char *shadow_copy2_insert_string(TALLOC_CTX *mem_ctx,
{ {
const char *fmt; const char *fmt;
struct tm snap_tm; struct tm snap_tm;
fstring gmt; fstring snaptime_string;
size_t gmt_len; size_t snaptime_len;
if (localtime_r(&snapshot, &snap_tm) == 0) {
DEBUG(10, ("gmtime_r failed\n"));
return NULL;
}
fmt = lp_parm_const_string(SNUM(handle->conn), "shadow", fmt = lp_parm_const_string(SNUM(handle->conn), "shadow",
"format", GMT_FORMAT); "format", GMT_FORMAT);
if (lp_parm_bool(SNUM(handle->conn), "shadow", "sscanf", false)) { if (lp_parm_bool(SNUM(handle->conn), "shadow", "sscanf", false)) {
gmt_len = snprintf(gmt, sizeof(gmt), fmt, snaptime_len = snprintf(snaptime_string, sizeof(snaptime_string), fmt,
(unsigned long)snapshot); (unsigned long)snapshot);
if (gmt_len == 0) { if (snaptime_len <= 0) {
DEBUG(10, ("snprintf failed\n")); DEBUG(10, ("snprintf failed\n"));
return NULL; return NULL;
} }
} else { } else {
gmt_len = strftime(gmt, sizeof(gmt), fmt, if (lp_parm_bool(SNUM(handle->conn), "shadow", "localtime", false)) {
if (localtime_r(&snapshot, &snap_tm) == 0) {
DEBUG(10, ("gmtime_r failed\n"));
return NULL;
}
} else {
if (gmtime_r(&snapshot, &snap_tm) == 0) {
DEBUG(10, ("gmtime_r failed\n"));
return NULL;
}
}
snaptime_len = strftime(snaptime_string, sizeof(snaptime_string), fmt,
&snap_tm); &snap_tm);
if (gmt_len == 0) { if (snaptime_len == 0) {
DEBUG(10, ("strftime failed\n")); DEBUG(10, ("strftime failed\n"));
return NULL; return NULL;
} }
@ -179,7 +186,7 @@ static char *shadow_copy2_insert_string(TALLOC_CTX *mem_ctx,
lp_parm_const_string( lp_parm_const_string(
SNUM(handle->conn), "shadow", "snapdir", SNUM(handle->conn), "shadow", "snapdir",
".snapshots"), ".snapshots"),
gmt); snaptime_string);
} }
static bool shadow_copy2_strip_snapshot(TALLOC_CTX *mem_ctx, static bool shadow_copy2_strip_snapshot(TALLOC_CTX *mem_ctx,
@ -207,7 +214,7 @@ static bool shadow_copy2_strip_snapshot(TALLOC_CTX *mem_ctx,
goto no_snapshot; goto no_snapshot;
} }
tm.tm_isdst = -1; tm.tm_isdst = -1;
timestamp = mktime(&tm); timestamp = timegm(&tm);
if (timestamp == (time_t)-1) { if (timestamp == (time_t)-1) {
goto no_snapshot; goto no_snapshot;
} }