- diff --git a/daemon/acl.c b/daemon/acl.c
- index 1d1eac4..4297722 100644
- --- a/daemon/acl.c
- +++ b/daemon/acl.c
- @@ -223,6 +223,18 @@ static int map_name_2_sid(nfs41_daemon_globals *nfs41dg, int query, DWORD *sid_l
- name = "roland_mainz";
- dprintf(ACLLVL, "map_name_2_sid: remap 1616 --> roland_mainz\n");
- }
- + else if (!strcmp(name, "swulsch")) {
- + name = "siegfried_wulsch";
- + dprintf(ACLLVL, "map_name_2_sid: remap swulsch --> siegfried_wulsch\n");
- + }
- + else if (!strcmp(name, "197609")) {
- + name = "siegfried_wulsch";
- + dprintf(ACLLVL, "map_name_2_sid: remap 197609 --> siegfried_wulsch\n");
- + }
- + else if (!strcmp(name, "1818")) {
- + name = "siegfried_wulsch";
- + dprintf(ACLLVL, "map_name_2_sid: remap 1818 --> siegfried_wulsch\n");
- + }
- }
- #endif /* NFS41_DRIVER_FEATURE_MAP_UNMAPPED_USER_TO_UNIXUSER_SID */
- diff --git a/daemon/getattr.c b/daemon/getattr.c
- index 7c5f241..8595f5c 100644
- --- a/daemon/getattr.c
- +++ b/daemon/getattr.c
- @@ -80,6 +80,12 @@ static int handle_getattr(void *daemon_context, nfs41_upcall *upcall)
- nfs41_open_state *state = upcall->state_ref;
- nfs41_file_info info = { 0 };
- + if (((char *)state->session) == ((char *)0xdddddddddddddddd)) {
- + eprintf("handle_getattr: Invalid session pointer 0xdddddddddddddddd\n");
- + status = ERROR_INVALID_PARAMETER;
- + goto out;
- + }
- +
- status = nfs41_cached_getattr(state->session, &state->file, &info);
- if (status) {
- eprintf("nfs41_cached_getattr() failed with %d\n", status);
- diff --git a/daemon/name_cache.c b/daemon/name_cache.c
- index 3f944fd..5bb6aee 100644
- --- a/daemon/name_cache.c
- +++ b/daemon/name_cache.c
- @@ -351,12 +351,24 @@ static void copy_attrs(
- dst->type = src->type;
- dst->numlinks = src->numlinks;
- dst->mode = src->mode;
- - EASSERT(src->owner != NULL);
- + EASSERT(src->owner[0] != '\0');
- + if (src->owner[0] != '\0') {
- dst->owner = dst->owner_buf;
- (void)strcpy(dst->owner, src->owner);
- - EASSERT(src->owner_group != NULL);
- + }
- + else {
- + /* this should only happen for newly created files7dirs */
- + dst->owner = NULL;
- + }
- + EASSERT(src->owner_group[0] != '\0');
- + if (src->owner_group[0] != '\0') {
- dst->owner_group = dst->owner_group_buf;
- (void)strcpy(dst->owner_group, src->owner_group);
- + }
- + else {
- + /* this should only happen for newly created files7dirs */
- + dst->owner_group = NULL;
- + }
- dst->fileid = src->fileid;
- dst->hidden = src->hidden;
- dst->system = src->system;
- @@ -369,8 +381,11 @@ static void copy_attrs(
- dst->attrmask.arr[1] = FATTR4_WORD1_MODE
- | FATTR4_WORD1_NUMLINKS | FATTR4_WORD1_TIME_ACCESS
- | FATTR4_WORD1_TIME_CREATE | FATTR4_WORD1_TIME_MODIFY
- - | FATTR4_WORD1_SYSTEM
- - | FATTR4_WORD1_OWNER | FATTR4_WORD1_OWNER_GROUP;
- + | FATTR4_WORD1_SYSTEM;
- + if (dst->owner)
- + dst->attrmask.arr[1] |= FATTR4_WORD1_OWNER;
- + if (dst->owner_group)
- + dst->attrmask.arr[1] |= FATTR4_WORD1_OWNER_GROUP;
- }
- diff --git a/daemon/nfs41_xdr.c b/daemon/nfs41_xdr.c
- index 9bde0f0..6889a79 100644
- --- a/daemon/nfs41_xdr.c
- +++ b/daemon/nfs41_xdr.c
- @@ -1815,6 +1815,7 @@ static bool_t decode_file_attrs(
- EASSERT(owner_len > 0);
- EASSERT(owner_len < sizeof(info->owner_group_buf));
- info->owner[owner_len] = '\0';
- + EASSERT(info->owner[0] != '\0');
- }
- if (attrs->attrmask.arr[1] & FATTR4_WORD1_OWNER_GROUP) {
- if (info->owner_group == NULL)
- @@ -1830,6 +1831,7 @@ static bool_t decode_file_attrs(
- EASSERT(owner_group_len > 0);
- EASSERT(owner_group_len < sizeof(info->owner_group_buf));
- info->owner_group[owner_group_len] = '\0';
- + EASSERT(info->owner_group[0] != '\0');
- }
- if (attrs->attrmask.arr[1] & FATTR4_WORD1_SPACE_AVAIL) {
- if (!xdr_u_hyper(xdr, &info->space_avail))
- diff --git a/daemon/open.c b/daemon/open.c
- index a9ffcb0..35ff2b1 100644
- --- a/daemon/open.c
- +++ b/daemon/open.c
- @@ -669,12 +669,47 @@ static int handle_open(void *daemon_context, nfs41_upcall *upcall)
- gid_t map_gid = -1;
- char *at_ch; /* pointer to '@' */
- +#if 1
- + /* this should only happen for newly created files/dirs */
- + if (((info.attrmask.arr[1] & FATTR4_WORD1_OWNER) == 0) ||
- + ((info.attrmask.arr[1] & FATTR4_WORD1_OWNER_GROUP) == 0)) {
- + bitmap4 og_attr_request = { 0 };
- + nfs41_file_info og_info = { 0 };
- + nfsacl41 acl = { 0 };
- +
- + og_attr_request.count = 2;
- + og_attr_request.arr[1] =
- + FATTR4_WORD1_OWNER | FATTR4_WORD1_OWNER_GROUP;
- + og_info.owner = og_info.owner_buf;
- + og_info.owner_group = og_info.owner_group_buf;
- + status = nfs41_getattr(state->session, &state->file,
- + &og_attr_request, &og_info);
- + if (status) {
- + eprintf("get_stat_data: nfs41_getattr('%s') "
- + "failed with %d\n",
- + state->path.path,
- + status);
- + goto out_free_state;
- + }
- +
- + info.owner = info.owner_buf;
- + (void)strcpy(info.owner, og_info.owner);
- + info.attrmask.arr[1] |= FATTR4_WORD1_OWNER;
- + info.owner_group = info.owner_group_buf;
- + (void)strcpy(info.owner_group, og_info.owner_group);
- + info.attrmask.arr[1] |= FATTR4_WORD1_OWNER_GROUP;
- + }
- +#endif
- +
- EASSERT((info.attrmask.arr[1] & FATTR4_WORD1_OWNER) != 0);
- EASSERT((info.attrmask.arr[1] & FATTR4_WORD1_OWNER_GROUP) != 0);
- EASSERT(info.owner != NULL);
- EASSERT(info.owner_group != NULL);
- EASSERT(info.owner == info.owner_buf);
- EASSERT(info.owner_group == info.owner_group_buf);
- + EASSERT(strlen(info.owner) > 0);
- + EASSERT(strlen(info.owner_group) > 0);
- +
- /* Make copies as we will modify them */
- (void)strcpy(owner, info.owner);
- (void)strcpy(owner_group, info.owner_group);
- @@ -698,8 +733,9 @@ static int handle_open(void *daemon_context, nfs41_upcall *upcall)
- }
- else {
- args->owner_local_uid = NFS_USER_NOBODY_UID;
- - eprintf("get_stat_data: "
- + eprintf("get_stat_data('%s'): "
- "no username mapping for '%s', fake uid=%d\n",
- + state->path.path,
- owner, args->owner_local_uid);
- }
- @@ -721,12 +757,14 @@ static int handle_open(void *daemon_context, nfs41_upcall *upcall)
- }
- else {
- args->owner_group_local_gid = NFS_GROUP_NOGROUP_GID;
- - eprintf("get_stat_data: "
- + eprintf("get_stat_data('%s'): "
- "no group mapping for '%s', fake gid=%d\n",
- + state->path.path,
- owner_group, args->owner_group_local_gid);
- }
- - dprintf(1, "handle_open: stat: owner=%u/'%s', owner_group=%u/'%s'\n",
- + dprintf(1, "handle_open('%s'): stat: owner=%u/'%s', owner_group=%u/'%s'\n",
- + state->path.path,
- (unsigned int)args->owner_local_uid, owner,
- (unsigned int)args->owner_group_local_gid, owner_group);
- #endif /* NFS41_DRIVER_FEATURE_LOCAL_UIDGID_IN_NFSV3ATTRIBUTES */
- diff --git a/daemon/util.c b/daemon/util.c
- index 07aa2c6..c482624 100644
- --- a/daemon/util.c
- +++ b/daemon/util.c
- @@ -207,7 +207,9 @@ void nfs41_file_info_cpy(
- IN const nfs41_file_info *src)
- {
- (void)memcpy(dest, src, sizeof(nfs41_file_info));
- + if (src->owner != NULL)
- dest->owner = dest->owner_buf;
- + if (src->owner_group != NULL)
- dest->owner_group = dest->owner_group_buf;
- }
- diff --git a/sys/nfs41_build_features.h b/sys/nfs41_build_features.h
- index 93ee7a9..d43334a 100644
- --- a/sys/nfs41_build_features.h
- +++ b/sys/nfs41_build_features.h
- @@ -32,19 +32,19 @@
- /*
- * NFS41_DRIVER_FEATURE_LOCAL_UIDGID_IN_NFSV3ATTRIBUTES - return local uid/gid values
- */
- -// #define NFS41_DRIVER_FEATURE_LOCAL_UIDGID_IN_NFSV3ATTRIBUTES 1
- +#define NFS41_DRIVER_FEATURE_LOCAL_UIDGID_IN_NFSV3ATTRIBUTES 1
- /*
- * NFS41_DRIVER_FEATURE_MAP_UNMAPPED_USER_TO_UNIXUSER_SID - give NFS
- * files which do not map to a local account a SID in the
- * Unix_User+x/Unix_Group+x range
- */
- -// #define NFS41_DRIVER_FEATURE_MAP_UNMAPPED_USER_TO_UNIXUSER_SID 1
- +#define NFS41_DRIVER_FEATURE_MAP_UNMAPPED_USER_TO_UNIXUSER_SID 1
- /*
- * NFS41_DRIVER_FEATURE_NAMESERVICE_CYGWIN - use Cygwin /usr/bin/getent
- * as "name service"
- */
- -// #define NFS41_DRIVER_FEATURE_NAMESERVICE_CYGWIN 1
- +#define NFS41_DRIVER_FEATURE_NAMESERVICE_CYGWIN 1
- #endif /* !_NFS41_DRIVER_BUILDFEATURES_ */
msnfs41client: Fix assertions for new files/dirs for owner/owner_group
Posted by Anonymous on Tue 24th Oct 2023 12:52
raw | new post
Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.