|
@@ -14,12 +14,10 @@
|
|
|
#include <linux/sunrpc/auth.h>
|
|
|
#include <linux/user_namespace.h>
|
|
|
|
|
|
-#define NFS_NGROUPS 16
|
|
|
-
|
|
|
struct unx_cred {
|
|
|
struct rpc_cred uc_base;
|
|
|
kgid_t uc_gid;
|
|
|
- kgid_t uc_gids[NFS_NGROUPS];
|
|
|
+ kgid_t uc_gids[UNX_NGROUPS];
|
|
|
};
|
|
|
#define uc_uid uc_base.cr_uid
|
|
|
|
|
@@ -82,13 +80,13 @@ unx_create_cred(struct rpc_auth *auth, struct auth_cred *acred, int flags, gfp_t
|
|
|
|
|
|
if (acred->group_info != NULL)
|
|
|
groups = acred->group_info->ngroups;
|
|
|
- if (groups > NFS_NGROUPS)
|
|
|
- groups = NFS_NGROUPS;
|
|
|
+ if (groups > UNX_NGROUPS)
|
|
|
+ groups = UNX_NGROUPS;
|
|
|
|
|
|
cred->uc_gid = acred->gid;
|
|
|
for (i = 0; i < groups; i++)
|
|
|
cred->uc_gids[i] = acred->group_info->gid[i];
|
|
|
- if (i < NFS_NGROUPS)
|
|
|
+ if (i < UNX_NGROUPS)
|
|
|
cred->uc_gids[i] = INVALID_GID;
|
|
|
|
|
|
return &cred->uc_base;
|
|
@@ -132,12 +130,12 @@ unx_match(struct auth_cred *acred, struct rpc_cred *rcred, int flags)
|
|
|
|
|
|
if (acred->group_info != NULL)
|
|
|
groups = acred->group_info->ngroups;
|
|
|
- if (groups > NFS_NGROUPS)
|
|
|
- groups = NFS_NGROUPS;
|
|
|
+ if (groups > UNX_NGROUPS)
|
|
|
+ groups = UNX_NGROUPS;
|
|
|
for (i = 0; i < groups ; i++)
|
|
|
if (!gid_eq(cred->uc_gids[i], acred->group_info->gid[i]))
|
|
|
return 0;
|
|
|
- if (groups < NFS_NGROUPS && gid_valid(cred->uc_gids[groups]))
|
|
|
+ if (groups < UNX_NGROUPS && gid_valid(cred->uc_gids[groups]))
|
|
|
return 0;
|
|
|
return 1;
|
|
|
}
|
|
@@ -166,7 +164,7 @@ unx_marshal(struct rpc_task *task, __be32 *p)
|
|
|
*p++ = htonl((u32) from_kuid(&init_user_ns, cred->uc_uid));
|
|
|
*p++ = htonl((u32) from_kgid(&init_user_ns, cred->uc_gid));
|
|
|
hold = p++;
|
|
|
- for (i = 0; i < 16 && gid_valid(cred->uc_gids[i]); i++)
|
|
|
+ for (i = 0; i < UNX_NGROUPS && gid_valid(cred->uc_gids[i]); i++)
|
|
|
*p++ = htonl((u32) from_kgid(&init_user_ns, cred->uc_gids[i]));
|
|
|
*hold = htonl(p - hold - 1); /* gid array length */
|
|
|
*base = htonl((p - base - 1) << 2); /* cred length */
|