char *snapshot_basepath; /* the absolute version of snapdir */
};
+
+/*
+ * shadow_copy2 private structure. This structure will be
+ * used to keep module specific information
+ */
+struct shadow_copy2_private {
+ struct shadow_copy2_config *config;
+};
+
static bool shadow_copy2_find_slashes(TALLOC_CTX *mem_ctx, const char *str,
size_t **poffsets,
unsigned *pnum_offsets)
struct tm snap_tm;
ssize_t snaptime_len;
struct shadow_copy2_config *config;
+ struct shadow_copy2_private *priv;
- SMB_VFS_HANDLE_GET_DATA(handle, config, struct shadow_copy2_config,
+ SMB_VFS_HANDLE_GET_DATA(handle, priv, struct shadow_copy2_private,
return 0);
+ config = priv->config;
+
if (config->use_sscanf) {
snaptime_len = snprintf(snaptime_string,
len,
ssize_t snaptime_len = 0;
char *result = NULL;
struct shadow_copy2_config *config;
+ struct shadow_copy2_private *priv;
- SMB_VFS_HANDLE_GET_DATA(handle, config, struct shadow_copy2_config,
+ SMB_VFS_HANDLE_GET_DATA(handle, priv, struct shadow_copy2_private,
return NULL);
+ config = priv->config;
+
snaptime_len = shadow_copy2_posix_gmt_string(handle,
snapshot,
snaptime_string,
fstring snaptime_string;
ssize_t snaptime_len = 0;
char *result = NULL;
- struct shadow_copy2_config *config;
+ struct shadow_copy2_private *priv;
- SMB_VFS_HANDLE_GET_DATA(handle, config, struct shadow_copy2_config,
+ SMB_VFS_HANDLE_GET_DATA(handle, priv, struct shadow_copy2_private,
return NULL);
snaptime_len = shadow_copy2_posix_gmt_string(handle,
}
result = talloc_asprintf(mem_ctx, "%s/%s",
- config->snapshot_basepath, snaptime_string);
+ priv->config->snapshot_basepath, snaptime_string);
if (result == NULL) {
DEBUG(1, (__location__ " talloc_asprintf failed\n"));
}
char *q;
char *stripped;
size_t rest_len, dst_len;
- struct shadow_copy2_config *config;
+ struct shadow_copy2_private *priv;
const char *snapdir;
ssize_t snapdirlen;
ptrdiff_t len_before_gmt;
- SMB_VFS_HANDLE_GET_DATA(handle, config, struct shadow_copy2_config,
+ SMB_VFS_HANDLE_GET_DATA(handle, priv, struct shadow_copy2_private,
return false);
DEBUG(10, (__location__ ": enter path '%s'\n", name));
rest_len = strlen(q);
dst_len = (p-name) + rest_len;
- if (config->snapdirseverywhere) {
+ if (priv->config->snapdirseverywhere) {
char *insert;
bool have_insert;
insert = shadow_copy2_insert_string(talloc_tos(), handle,
int i, saved_errno;
size_t min_offset;
struct shadow_copy2_config *config;
+ struct shadow_copy2_private *priv;
size_t in_share_offset = 0;
- SMB_VFS_HANDLE_GET_DATA(handle, config, struct shadow_copy2_config,
+ SMB_VFS_HANDLE_GET_DATA(handle, priv, struct shadow_copy2_private,
return NULL);
+ config = priv->config;
+
DEBUG(10, ("converting '%s'\n", name));
if (!config->snapdirseverywhere) {
static void convert_sbuf(vfs_handle_struct *handle, const char *fname,
SMB_STRUCT_STAT *sbuf)
{
- struct shadow_copy2_config *config;
+ struct shadow_copy2_private *priv;
- SMB_VFS_HANDLE_GET_DATA(handle, config, struct shadow_copy2_config,
+ SMB_VFS_HANDLE_GET_DATA(handle, priv, struct shadow_copy2_private,
return);
- if (config->fixinodes) {
+ if (priv->config->fixinodes) {
/* some snapshot systems, like GPFS, return the name
device:inode for the snapshot files as the current
files. That breaks the 'restore' button in the shadow copy
{
struct smb_filename smb_fname;
int ret;
- struct shadow_copy2_config *config;
+ struct shadow_copy2_private *priv;
- SMB_VFS_HANDLE_GET_DATA(handle, config, struct shadow_copy2_config,
+ SMB_VFS_HANDLE_GET_DATA(handle, priv, struct shadow_copy2_private,
return NULL);
ZERO_STRUCT(smb_fname);
smb_fname.base_name = talloc_asprintf(talloc_tos(), "%s/%s",
- path, config->snapdir);
+ path, priv->config->snapdir);
if (smb_fname.base_name == NULL) {
return NULL;
}
char *path, *p;
const char *snapdir;
struct shadow_copy2_config *config;
+ struct shadow_copy2_private *priv;
- SMB_VFS_HANDLE_GET_DATA(handle, config, struct shadow_copy2_config,
+ SMB_VFS_HANDLE_GET_DATA(handle, priv, struct shadow_copy2_private,
return NULL);
+ config = priv->config;
+
/*
* If the non-snapdisrseverywhere mode, we should not search!
*/
unsigned long int timestamp_long;
const char *fmt;
struct shadow_copy2_config *config;
+ struct shadow_copy2_private *priv;
- SMB_VFS_HANDLE_GET_DATA(handle, config, struct shadow_copy2_config,
+ SMB_VFS_HANDLE_GET_DATA(handle, priv, struct shadow_copy2_private,
return NULL);
+ config = priv->config;
+
fmt = config->gmt_format;
ZERO_STRUCT(timestamp);
{
int (*cmpfunc)(const void *, const void *);
const char *sort;
- struct shadow_copy2_config *config;
+ struct shadow_copy2_private *priv;
- SMB_VFS_HANDLE_GET_DATA(handle, config, struct shadow_copy2_config,
+ SMB_VFS_HANDLE_GET_DATA(handle, priv, struct shadow_copy2_private,
return);
- sort = config->sort_order;
+ sort = priv->config->sort_order;
if (sort == NULL) {
return;
}
const char *service, const char *user)
{
struct shadow_copy2_config *config;
+ struct shadow_copy2_private *priv;
int ret;
const char *snapdir;
const char *gmt_format;
return ret;
}
- config = talloc_zero(handle->conn, struct shadow_copy2_config);
+ priv = talloc_zero(handle->conn, struct shadow_copy2_private);
+ if (priv == NULL) {
+ DEBUG(0, ("talloc_zero() failed\n"));
+ errno = ENOMEM;
+ return -1;
+ }
+
+ config = talloc_zero(priv, struct shadow_copy2_config);
if (config == NULL) {
DEBUG(0, ("talloc_zero() failed\n"));
errno = ENOMEM;
return -1;
}
+ priv->config = config;
+
gmt_format = lp_parm_const_string(SNUM(handle->conn),
"shadow", "format",
GMT_FORMAT);
));
- SMB_VFS_HANDLE_SET_DATA(handle, config,
- NULL, struct shadow_copy2_config,
+ SMB_VFS_HANDLE_SET_DATA(handle, priv,
+ NULL, struct shadow_copy2_private,
return -1);
return 0;