return basedir;
}
+static const char *non_wcard_fname(TALLOC_CTX *mem_ctx, const char *fname)
+{
+ char *result, *last_slash;
+
+ if (!ms_has_wild(fname)) {
+ DEBUG(10, ("%s contains no wildcard\n", fname));
+ return fname;
+ }
+ result = talloc_strdup(mem_ctx, fname);
+ if (result == NULL) {
+ return NULL;
+ }
+ last_slash = strrchr_m(result, '/');
+ if (last_slash == NULL) {
+ TALLOC_FREE(result);
+ return NULL;
+ }
+ *last_slash = '\0';
+ DEBUG(10, ("non_wcard_fname returns %s\n", result));
+ return result;
+}
+
/*
convert a filename from a share relative path, to a path in the
snapshot directory
const char *snapdir, *relpath, *baseoffset, *basedir;
size_t baselen;
char *ret, *prefix;
+ const char *no_wcard_name;
+ struct stat sbuf;
+
+ no_wcard_name = non_wcard_fname(talloc_tos(), fname);
+ if ((no_wcard_name != NULL) && (stat(fname, &sbuf) == 0)) {
+ talloc_free(tmp_ctx);
+ return talloc_strdup(handle->data, fname);
+ }
snapdir = shadow_copy2_find_snapdir(tmp_ctx, handle);
if (snapdir == NULL) {
const char *snapdir, *baseoffset, *basedir, *gmt_start;
size_t baselen;
char *ret;
+ const char *no_wcard_name;
+ struct stat sbuf;
DEBUG(10, ("shadow_copy2_connectpath called with %s\n", fname));
+ no_wcard_name = non_wcard_fname(talloc_tos(), fname);
+ if ((no_wcard_name != NULL) && (stat(no_wcard_name, &sbuf) == 0)) {
+ return handle->conn->connectpath;
+ }
+
if (!shadow_copy2_match_name(fname, &gmt_start)) {
return handle->conn->connectpath;
}