* setpag
*
*/
+
+#include <unistd.h>
+#ifdef AFS_SUN510_ENV
+#include <sys/cred.h>
+#endif
+
#include <afsconfig.h>
#include "afs/param.h"
AFS_STATCNT(afs_getgroups);
gidset[0] = gidset[1] = 0;
+#if defined(AFS_SUN510_ENV)
+ savengrps = ngrps = crgetngroups(cred);
+ gp = crgetgroups(cred);
+#else
savengrps = ngrps = cred->cr_ngroups;
gp = cred->cr_groups;
+#endif
while (ngrps--)
*gidset++ = *gp++;
return savengrps;
afs_setgroups(struct cred **cred, int ngroups, gid_t * gidset,
int change_parent)
{
- int ngrps;
- int i;
gid_t *gp;
AFS_STATCNT(afs_setgroups);
}
if (!change_parent)
*cred = (struct cred *)crcopy(*cred);
+#if defined(AFS_SUN510_ENV)
+ crsetgroups(*cred, ngroups, gidset);
+ gp = crgetgroups(*cred);
+#else
(*cred)->cr_ngroups = ngroups;
gp = (*cred)->cr_groups;
+#endif
while (ngroups--)
*gp++ = *gidset++;
mutex_exit(&curproc->p_crlock);
struct afs_dynSymlink *tps;
int found = 0;
+#if defined(AFS_SUN510_ENV)
+ if (crgetruid(acred))
+#else
if (acred->cr_uid)
+#endif
return EPERM;
ObtainWriteLock(&afs_dynSymlinkLock, 97);
extern struct unixuser *afs_FindUser(), *afs_GetUser();
register struct unixuser *au = 0;
afs_int32 pag, code = 0;
+ uid_t uid;
AFS_ASSERT_GLOCK();
AFS_STATCNT(afs_nfsclient_reqhandler);
pag = NOPAG; /* No unixuser struct so pag not trusted */
}
}
- np = afs_FindNfsClientPag((*cred)->cr_uid, host, 0);
+#if defined(AFS_SUN510_ENV)
+ uid = crgetuid(*cred);
+#else
+ uid = (*cred)->cr_uid;
+#endif
+ np = afs_FindNfsClientPag(uid, host, 0);
afs_Trace4(afs_iclSetp, CM_TRACE_NFSREQH, ICL_TYPE_INT32, pag,
- ICL_TYPE_LONG, (*cred)->cr_uid, ICL_TYPE_INT32, host,
+ ICL_TYPE_LONG, uid, ICL_TYPE_INT32, host,
ICL_TYPE_POINTER, np);
if (!np) {
/* Even if there is a "good" pag coming in we don't accept it if no nfsclientpag struct exists for the user since that would mean that the translator rebooted and therefore we ignore all older pag values */
{
int pagvalue;
struct AFS_UCRED *credp = u.u_cred;
- int gidset0, gidset1;
+ gid_t gidset0, gidset1;
+#ifdef AFS_SUN510_ENV
+ const gid_t *gids;
+
+ gids = crgetgroups(*credp);
+ gidset0 = gids[0];
+ gidset1 = gids[1];
+#else
gidset0 = credp->cr_groups[0];
gidset1 = credp->cr_groups[1];
+#endif
pagvalue = afs_get_pag_from_groups(gidset0, gidset1);
return pagvalue;
}
av->uid = -2; /* XXX nobody... ? */
else
av->uid = acred->cr_uid; /* bsd creds don't have ruid */
+#elif defined(AFS_SUN510_ENV)
+ av->uid = crgetruid(acred);
#else
av->uid = acred->cr_ruid; /* default when no pag is set */
#endif
{
afs_int32 pag;
gid_t g0, g1;
+#if defined(AFS_SUN510_ENV)
+ const gid_t *gids;
+ int ngroups;
+#endif
AFS_STATCNT(PagInCred);
if (cred == NULL || cred == afs_osi_credp) {
return NOPAG;
}
+#if defined(AFS_SUN510_ENV)
+ gids = crgetgroups(cred);
+ ngroups = crgetngroups(cred);
+#endif
#if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
if (cred == NOCRED || cred == FSCRED) {
return NOPAG;
goto out;
}
#elif defined(AFS_SGI_ENV) || defined(AFS_SUN5_ENV) || defined(AFS_DUX40_ENV) || defined(AFS_LINUX20_ENV) || defined(AFS_XBSD_ENV)
+#if defined(AFS_SUN510_ENV)
+ if (ngroups < 2) {
+#else
if (cred->cr_ngroups < 2) {
+#endif
pag = NOPAG;
goto out;
}
#elif defined(AFS_LINUX26_ENV)
g0 = GROUP_AT(cred->cr_group_info, 0);
g1 = GROUP_AT(cred->cr_group_info, 1);
+#elif defined(AFS_SUN510_ENV)
+ g0 = gids[0];
+ g1 = gids[1];
#else
g0 = cred->cr_groups[0];
g1 = cred->cr_groups[1];
pag = PagInCred(pcred);
#if defined(AFS_DARWIN_ENV) || defined(AFS_FBSD40_ENV) || defined(AFS_LINUX22_ENV)
uid = (pag != NOPAG ? pag : pcred->cr_uid);
+#elif defined(AFS_SUN510_ENV)
+ uid = (pag != NOPAG ? pag : crgetruid(pcred));
#else
uid = (pag != NOPAG ? pag : pcred->cr_ruid);
#endif