summaryrefslogtreecommitdiff
path: root/source3/rpc_server
diff options
context:
space:
mode:
authorRalph Boehme <slow@samba.org>2019-05-06 14:19:31 +0200
committerJeremy Allison <jra@samba.org>2019-08-08 21:43:14 +0000
commit64f182412a5b7bdb1f8eccffaee296e7c8554a95 (patch)
treee413dfe13e134c9b14c688a226591ab49274861b /source3/rpc_server
parentb2bf13ecf7b5406665f27487cb892e4f15fb28c4 (diff)
downloadsamba-64f182412a5b7bdb1f8eccffaee296e7c8554a95.tar.gz
s3:mdssvc: fix slrpc_fetch_attributes() when CNID is not known
Samba currenlty fails the whole RPC request, macOS returns returns a nil entry for the requested CNID: DALLOC_CTX(#1): { sl_array_t(#3): { uint64_t: 0x0000 CNIDs: unkn1: 0xfec, unkn2: 0x6b000020 DALLOC_CTX(#1): { uint64_t: 0xe4bbf314c03b1e } sl_filemeta_t(#1): { sl_array_t(#2): { nil nil } } } } Signed-off-by: Ralph Boehme <slow@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org> Autobuild-User(master): Jeremy Allison <jra@samba.org> Autobuild-Date(master): Thu Aug 8 21:43:14 UTC 2019 on sn-devel-184
Diffstat (limited to 'source3/rpc_server')
-rw-r--r--source3/rpc_server/mdssvc/mdssvc.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/source3/rpc_server/mdssvc/mdssvc.c b/source3/rpc_server/mdssvc/mdssvc.c
index 1d420482437..24183329301 100644
--- a/source3/rpc_server/mdssvc/mdssvc.c
+++ b/source3/rpc_server/mdssvc/mdssvc.c
@@ -1226,6 +1226,7 @@ static bool slrpc_fetch_attributes(struct mds_ctx *mds_ctx,
sl_filemeta_t *fm;
sl_array_t *fm_array;
sl_nil_t nil;
+ char *path = NULL;
struct stat_ex sb;
struct sl_inode_path_map *elem = NULL;
void *p;
@@ -1283,25 +1284,24 @@ static bool slrpc_fetch_attributes(struct mds_ctx *mds_ctx,
status = dbwrap_fetch(mds_ctx->ino_path_map, reply,
make_tdb_data((void*)&ino, sizeof(uint64_t)),
&val);
- if (!NT_STATUS_IS_OK(status)) {
- DEBUG(1, ("Failed to fetch inode: %s\n", nt_errstr(status)));
- goto error;
- }
- if (val.dsize != sizeof(p)) {
- DEBUG(1, ("invalid record pointer size: %zd\n", val.dsize));
- TALLOC_FREE(val.dptr);
- goto error;
- }
+ if (NT_STATUS_IS_OK(status)) {
+ if (val.dsize != sizeof(p)) {
+ DBG_ERR("invalid record pointer size: %zd\n", val.dsize);
+ TALLOC_FREE(val.dptr);
+ goto error;
+ }
- memcpy(&p, val.dptr, sizeof(p));
- elem = talloc_get_type_abort(p, struct sl_inode_path_map);
+ memcpy(&p, val.dptr, sizeof(p));
+ elem = talloc_get_type_abort(p, struct sl_inode_path_map);
+ path = elem->path;
- result = sys_stat(elem->path, &sb, false);
- if (result != 0) {
- goto error;
+ result = sys_stat(path, &sb, false);
+ if (result != 0) {
+ goto error;
+ }
}
- ok = add_filemeta(mds_ctx, reqinfo, fm_array, elem->path, &sb);
+ ok = add_filemeta(mds_ctx, reqinfo, fm_array, path, &sb);
if (!ok) {
goto error;
}