39 const char *link_pos =
link;
40 const char *link_end =
link + link_len;
45 path_pos =
path->path;
60 eprintf(
"symlink with .. that points below server root!\n");
82 if (path_pos == path_max) {
112 dprintf(2,
"--> nfs41_symlink_target('%s', '%s')\n",
path->path,
link);
136 eprintf(
"abs_path_link() for path %s with link %s failed with %d\n",
141 dprintf(2,
"<-- nfs41_symlink_target('%s') returning %d\n",
160 dprintf(2,
"--> nfs41_symlink_follow('%s')\n", symlink->path->path);
184 dprintf(2,
"<-- nfs41_symlink_follow() returning %d\n",
status);
205 dprintf(1,
"parsing NFS41_SYMLINK: path='%s' set=%u target='%s'\n",
222 for (
p =
args->target_set; *
p;
p++)
if (*
p ==
'\\') *
p =
'/';
224 if (
state->file.fh.len) {
227 eprintf(
"handle_symlink: attempting to create a symlink when "
228 "the file=%s was already created on open; sending REMOVE "
229 "first\n",
state->file.path->path);
233 eprintf(
"nfs41_remove() for symlink=%s failed with %s\n",
244 createattrs.
mode = 0777;
248 eprintf(
"nfs41_create() for symlink=%s failed with %s\n",
260 eprintf(
"nfs41_readlink() for filename=%s failed with %s\n",
266 dprintf(2,
"returning symlink target '%s'\n",
args->target_get.path);
275 unsigned short len = (
args->target_get.len + 1) *
sizeof(
WCHAR);
285 args->target_get.path,
args->target_get.len,
ACPI_SIZE strlen(const char *String)
int nfs41_lookup(IN nfs41_root *root, IN nfs41_session *session, IN OUT nfs41_abs_path *path_inout, OUT OPTIONAL nfs41_path_fh *parent_out, OUT OPTIONAL nfs41_path_fh *target_out, OUT OPTIONAL nfs41_file_info *info_out, OUT nfs41_session **session_out)
int nfs41_symlink_follow(IN nfs41_root *root, IN nfs41_session *session, IN nfs41_path_fh *symlink, OUT nfs41_file_info *info)
static int parse_symlink(unsigned char *buffer, uint32_t length, nfs41_upcall *upcall)
static int abs_path_link(OUT nfs41_abs_path *path, IN char *path_pos, IN const char *link, IN uint32_t link_len)
const nfs41_upcall_op nfs41_op_symlink
int nfs41_symlink_target(IN nfs41_session *session, IN nfs41_path_fh *file, OUT nfs41_abs_path *target)
static int handle_symlink(nfs41_upcall *upcall)
static int marshall_symlink(unsigned char *buffer, uint32_t *length, nfs41_upcall *upcall)
bool_t last_component(IN const char *path, IN const char *path_end, OUT nfs41_component *component)
int safe_write(unsigned char **pos, uint32_t *remaining, void *src, uint32_t src_len)
int map_symlink_errors(int status)
int safe_read(unsigned char **pos, uint32_t *remaining, void *dest, uint32_t dest_len)
int get_name(unsigned char **pos, uint32_t *remaining, const char **out_name)
bool_t next_component(IN const char *path, IN const char *path_end, OUT nfs41_component *component)
__inline int is_delimiter(char c)
__inline const char * prev_delimiter(const char *pos, const char *start)
void eprintf(LPCSTR format,...)
const char * nfs_error_string(int status)
#define MultiByteToWideChar
VOID WINAPI InitializeSRWLock(PSRWLOCK Lock)
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
__kernel_ptrdiff_t ptrdiff_t
GLint GLint GLsizei GLsizei GLsizei depth
GLuint GLsizei GLsizei * length
#define NFS41_MAX_PATH_LEN
#define NFS41_MAX_SYMLINK_DEPTH
nfs41_updowncall_list upcall
int nfs41_create(IN nfs41_session *session, IN uint32_t type, IN nfs41_file_info *createattrs, IN OPTIONAL const char *symlink, IN nfs41_path_fh *parent, OUT nfs41_path_fh *file, OUT nfs41_file_info *info)
int nfs41_remove(IN nfs41_session *session, IN nfs41_path_fh *parent, IN const nfs41_component *target, IN uint64_t fileid)
int nfs41_readlink(IN nfs41_session *session, IN nfs41_path_fh *file, IN uint32_t max_len, OUT char *link_out, OUT uint32_t *len_out)
STRSAFEAPI StringCchCatA(STRSAFE_LPSTR pszDest, size_t cchDest, STRSAFE_LPCSTR pszSrc)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
#define ERROR_BAD_NETPATH
#define ERROR_BUFFER_OVERFLOW
#define ERROR_PATH_NOT_FOUND
#define ERROR_TOO_MANY_LINKS