NTSTATUS status;
size_t len = 0;
int link_len = 0;
+ struct smb_filename *parent_fname = NULL;
+ struct smb_filename *base_name = NULL;
+
char *buffer = talloc_array(talloc_tos(), char, PATH_MAX+1);
if (!buffer) {
return NT_STATUS_DOS(ERRSRV, ERRbadlink);
}
- link_len = SMB_VFS_READLINKAT(conn,
+ status = parent_pathref(talloc_tos(),
conn->cwd_fsp,
smb_fname,
+ &parent_fname,
+ &base_name);
+ if (!NT_STATUS_IS_OK(status)) {
+ TALLOC_FREE(buffer);
+ return status;
+ }
+
+ link_len = SMB_VFS_READLINKAT(conn,
+ parent_fname->fsp,
+ base_name,
buffer,
PATH_MAX);
+ TALLOC_FREE(parent_fname);
+
if (link_len == -1) {
TALLOC_FREE(buffer);
return map_nt_error_from_unix(errno);