extern wchar_t RDR_UNCName[];
+static afs_int32
+RDR_ParseIoctlPath(RDR_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp,
+ cm_scache_t **scpp, afs_uint32 flags);
+
+static afs_int32
+RDR_ParseIoctlParent(RDR_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp,
+ cm_scache_t **scpp, wchar_t *leafp);
+
void
RDR_InitIoctl(void)
{
RDR_ioctlProcsp[VIOC_SETUNIXMODE] = RDR_IoctlSetUnixMode;
RDR_ioctlProcsp[VIOC_GETVERIFYDATA] = RDR_IoctlGetVerifyData;
RDR_ioctlProcsp[VIOC_SETVERIFYDATA] = RDR_IoctlSetVerifyData;
+ RDR_ioctlProcsp[VIOC_GETCALLERACCESS] = RDR_IoctlGetCallerAccess;
}
void
/* called to make a fid structure into an IOCTL fid structure */
void
-RDR_SetupIoctl(ULONG index, cm_fid_t *parentFid, cm_fid_t *rootFid, cm_user_t *userp)
+RDR_SetupIoctl(ULONG index, cm_fid_t *parentFid, cm_fid_t *rootFid, cm_user_t *userp, cm_req_t *reqp)
{
RDR_ioctl_t *iop;
- cm_req_t req;
-
- cm_InitReq(&req);
lock_ObtainWrite(&RDR_globalIoctlLock);
for ( iop=RDR_allIoctls; iop; iop=iop->next) {
if (iop) {
iop->flags = 0;
+ iop->req = *reqp;
/* we are reusing a previous ioctl */
if (cm_FidCmp(&iop->parentFid, parentFid)) {
cm_ReleaseSCache(iop->parentScp);
iop->parentScp = NULL;
}
- cm_GetSCache(parentFid, NULL, &iop->parentScp, userp, &req);
+ cm_GetSCache(parentFid, NULL, &iop->parentScp, userp, reqp);
iop->rootFid = *rootFid;
}
} else {
RDR_allIoctlsLast = iop;
}
iop->index = index;
+ iop->req = *reqp;
if (parentFid->cell == 0) {
iop->parentFid = cm_data.rootFid;
- iop->parentScp = cm_RootSCachep(userp, &req);
+ iop->parentScp = cm_RootSCachep(userp, reqp);
cm_HoldSCache(iop->parentScp);
} else {
iop->parentFid = *parentFid;
- cm_GetSCache(parentFid, NULL, &iop->parentScp, userp, &req);
+ cm_GetSCache(parentFid, NULL, &iop->parentScp, userp, reqp);
}
if (rootFid->cell == 0) {
iop->rootFid = cm_data.rootFid;
/* called from RDR_ReceiveCoreRead when we receive a read on the ioctl fid */
afs_int32
-RDR_IoctlRead(cm_user_t *userp, ULONG RequestId, ULONG BufferLength, void *MappedBuffer, ULONG *pBytesProcessed, cm_req_t *reqp, afs_uint32 pflags)
+RDR_IoctlRead(cm_user_t *userp, ULONG RequestId, ULONG BufferLength, void *MappedBuffer, ULONG *pBytesProcessed, afs_uint32 pflags)
{
RDR_ioctl_t *iop;
afs_uint32 count;
return code;
}
-/* called from RDR_PioctWRite when we receive a write call on the IOCTL
+/* called from RDR_PioctWrite when we receive a write call on the IOCTL
* file descriptor.
*/
afs_int32
-RDR_IoctlWrite(cm_user_t *userp, ULONG RequestId, ULONG BufferLength, void *MappedBuffer, cm_req_t *reqp)
+RDR_IoctlWrite(cm_user_t *userp, ULONG RequestId, ULONG BufferLength, void *MappedBuffer)
{
afs_int32 code = 0;
RDR_ioctl_t *iop;
*/
#define CM_PARSE_FLAG_LITERAL 1
-afs_int32
+static afs_int32
RDR_ParseIoctlPath(RDR_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp,
cm_scache_t **scpp, afs_uint32 flags)
{
return 0;
}
-
-
#define LEAF_SIZE 256
/* parse the passed-in file name and do a namei on its parent. If we fail,
* return an error code, otherwise return the vnode located in *scpp.
*/
-afs_int32
+static afs_int32
RDR_ParseIoctlParent(RDR_ioctl_t *ioctlp, cm_user_t *userp, cm_req_t *reqp,
cm_scache_t **scpp, wchar_t *leafp)
{
{
cm_scache_t *scp;
afs_int32 code;
- cm_req_t req;
cm_ioctlQueryOptions_t *optionsp;
afs_uint32 flags = 0;
- cm_InitReq(&req);
-
optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
cm_SkipIoctlPath(&ioctlp->ioctl);
cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume,
optionsp->fid.vnode, optionsp->fid.unique);
- code = cm_GetSCache(&fid, NULL, &scp, userp, &req);
+ code = cm_GetSCache(&fid, NULL, &scp, userp, &ioctlp->req);
} else {
- code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+ code = RDR_ParseIoctlPath(ioctlp, userp, &ioctlp->req, &scp, flags);
}
if (code)
return code;
- code = cm_IoctlGetACL(&ioctlp->ioctl, userp, scp, &req);
+ code = cm_IoctlGetACL(&ioctlp->ioctl, userp, scp, &ioctlp->req);
cm_ReleaseSCache(scp);
return code;
{
cm_scache_t *scp;
afs_int32 code;
- cm_req_t req;
afs_uint32 flags = 0;
- cm_InitReq(&req);
-
- code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+ code = RDR_ParseIoctlPath(ioctlp, userp, &ioctlp->req, &scp, flags);
if (code)
return code;
- code = cm_IoctlSetACL(&ioctlp->ioctl, userp, scp, &req);
+ code = cm_IoctlSetACL(&ioctlp->ioctl, userp, scp, &ioctlp->req);
cm_ReleaseSCache(scp);
return code;
{
afs_int32 code;
cm_scache_t *scp;
- cm_req_t req;
cm_ioctlQueryOptions_t *optionsp;
afs_uint32 flags = 0;
- cm_InitReq(&req);
-
optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
cm_SkipIoctlPath(&ioctlp->ioctl);
cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume,
optionsp->fid.vnode, optionsp->fid.unique);
- code = cm_GetSCache(&fid, NULL, &scp, userp, &req);
+ code = cm_GetSCache(&fid, NULL, &scp, userp, &ioctlp->req);
} else {
- code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+ code = RDR_ParseIoctlPath(ioctlp, userp, &ioctlp->req, &scp, flags);
}
if (code)
return code;
- code = cm_IoctlGetFileCellName(&ioctlp->ioctl, userp, scp, &req);
+ code = cm_IoctlGetFileCellName(&ioctlp->ioctl, userp, scp, &ioctlp->req);
cm_ReleaseSCache(scp);
afs_int32
RDR_IoctlFlushAllVolumes(struct RDR_ioctl *ioctlp, struct cm_user *userp, afs_uint32 pflags)
{
- cm_req_t req;
-
- cm_InitReq(&req);
-
cm_SkipIoctlPath(&ioctlp->ioctl); /* we don't care about the path */
- return cm_IoctlFlushAllVolumes(&ioctlp->ioctl, userp, &req);
+ return cm_IoctlFlushAllVolumes(&ioctlp->ioctl, userp, &ioctlp->req);
}
afs_int32
{
afs_int32 code;
cm_scache_t *scp;
- cm_req_t req;
cm_ioctlQueryOptions_t *optionsp;
afs_uint32 flags = 0;
- cm_InitReq(&req);
-
optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
cm_SkipIoctlPath(&ioctlp->ioctl);
cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume,
optionsp->fid.vnode, optionsp->fid.unique);
- code = cm_GetSCache(&fid, NULL, &scp, userp, &req);
+ code = cm_GetSCache(&fid, NULL, &scp, userp, &ioctlp->req);
} else {
- code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+ code = RDR_ParseIoctlPath(ioctlp, userp, &ioctlp->req, &scp, flags);
}
if (code)
return code;
- code = cm_IoctlFlushVolume(&ioctlp->ioctl, userp, scp, &req);
+ code = cm_IoctlFlushVolume(&ioctlp->ioctl, userp, scp, &ioctlp->req);
cm_ReleaseSCache(scp);
{
afs_int32 code;
cm_scache_t *scp;
- cm_req_t req;
cm_ioctlQueryOptions_t *optionsp;
afs_uint32 flags = 0;
- cm_InitReq(&req);
-
optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
cm_SkipIoctlPath(&ioctlp->ioctl);
cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume,
optionsp->fid.vnode, optionsp->fid.unique);
- code = cm_GetSCache(&fid, NULL, &scp, userp, &req);
+ code = cm_GetSCache(&fid, NULL, &scp, userp, &ioctlp->req);
} else {
- code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+ code = RDR_ParseIoctlPath(ioctlp, userp, &ioctlp->req, &scp, flags);
}
if (code)
return code;
- code = cm_IoctlFlushFile(&ioctlp->ioctl, userp, scp, &req);
+ code = cm_IoctlFlushFile(&ioctlp->ioctl, userp, scp, &ioctlp->req);
cm_ReleaseSCache(scp);
return code;
{
afs_int32 code;
cm_scache_t *scp;
- cm_req_t req;
- cm_InitReq(&req);
-
- code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, 0);
+ code = RDR_ParseIoctlPath(ioctlp, userp, &ioctlp->req, &scp, 0);
if (code) return code;
- code = cm_IoctlSetVolumeStatus(&ioctlp->ioctl, userp, scp, &req);
+ code = cm_IoctlSetVolumeStatus(&ioctlp->ioctl, userp, scp, &ioctlp->req);
cm_ReleaseSCache(scp);
return code;
cm_scache_t *scp;
cm_ioctlQueryOptions_t *optionsp;
afs_uint32 flags = 0;
- cm_req_t req;
-
- cm_InitReq(&req);
optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
cm_SkipIoctlPath(&ioctlp->ioctl);
cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume,
optionsp->fid.vnode, optionsp->fid.unique);
- code = cm_GetSCache(&fid, NULL, &scp, userp, &req);
+ code = cm_GetSCache(&fid, NULL, &scp, userp, &ioctlp->req);
} else {
- code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+ code = RDR_ParseIoctlPath(ioctlp, userp, &ioctlp->req, &scp, flags);
}
if (code)
return code;
- code = cm_IoctlGetVolumeStatus(&ioctlp->ioctl, userp, scp, &req);
+ code = cm_IoctlGetVolumeStatus(&ioctlp->ioctl, userp, scp, &ioctlp->req);
cm_ReleaseSCache(scp);
{
afs_int32 code;
cm_scache_t *scp;
- cm_req_t req;
cm_ioctlQueryOptions_t * optionsp;
afs_uint32 flags = 0;
- cm_InitReq(&req);
-
optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
- code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+ code = RDR_ParseIoctlPath(ioctlp, userp, &ioctlp->req, &scp, flags);
if (code)
return code;
- code = cm_IoctlGetFid(&ioctlp->ioctl, userp, scp, &req);
+ code = cm_IoctlGetFid(&ioctlp->ioctl, userp, scp, &ioctlp->req);
cm_ReleaseSCache(scp);
{
afs_int32 code;
cm_scache_t *scp;
- cm_req_t req;
cm_ioctlQueryOptions_t * optionsp;
afs_uint32 flags = 0;
- cm_InitReq(&req);
-
optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
cm_SkipIoctlPath(&ioctlp->ioctl);
cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume,
optionsp->fid.vnode, optionsp->fid.unique);
- code = cm_GetSCache(&fid, NULL, &scp, userp, &req);
+ code = cm_GetSCache(&fid, NULL, &scp, userp, &ioctlp->req);
} else {
- code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+ code = RDR_ParseIoctlPath(ioctlp, userp, &ioctlp->req, &scp, flags);
}
if (code)
return code;
- code = cm_IoctlGetFileType(&ioctlp->ioctl, userp, scp, &req);
+ code = cm_IoctlGetFileType(&ioctlp->ioctl, userp, scp, &ioctlp->req);
cm_ReleaseSCache(scp);
{
afs_int32 code;
cm_scache_t *scp;
- cm_req_t req;
cm_ioctlQueryOptions_t *optionsp;
afs_uint32 flags = 0;
- cm_InitReq(&req);
-
optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
cm_SkipIoctlPath(&ioctlp->ioctl);
cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume,
optionsp->fid.vnode, optionsp->fid.unique);
- code = cm_GetSCache(&fid, NULL, &scp, userp, &req);
+ code = cm_GetSCache(&fid, NULL, &scp, userp, &ioctlp->req);
} else {
- code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+ code = RDR_ParseIoctlPath(ioctlp, userp, &ioctlp->req, &scp, flags);
}
if (code)
return code;
- code = cm_IoctlGetOwner(&ioctlp->ioctl, userp, scp, &req);
+ code = cm_IoctlGetOwner(&ioctlp->ioctl, userp, scp, &ioctlp->req);
cm_ReleaseSCache(scp);
{
afs_int32 code;
cm_scache_t *scp;
- cm_req_t req;
cm_ioctlQueryOptions_t *optionsp;
afs_uint32 flags = 0;
- cm_InitReq(&req);
-
optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
cm_SkipIoctlPath(&ioctlp->ioctl);
cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume,
optionsp->fid.vnode, optionsp->fid.unique);
- code = cm_GetSCache(&fid, NULL, &scp, userp, &req);
+ code = cm_GetSCache(&fid, NULL, &scp, userp, &ioctlp->req);
} else {
- code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+ code = RDR_ParseIoctlPath(ioctlp, userp, &ioctlp->req, &scp, flags);
}
if (code)
return code;
- code = cm_IoctlWhereIs(&ioctlp->ioctl, userp, scp, &req);
+ code = cm_IoctlWhereIs(&ioctlp->ioctl, userp, scp, &ioctlp->req);
cm_ReleaseSCache(scp);
{
afs_int32 code;
cm_scache_t *dscp;
- cm_req_t req;
- cm_InitReq(&req);
-
- code = RDR_ParseIoctlPath(ioctlp, userp, &req, &dscp, 0);
+ code = RDR_ParseIoctlPath(ioctlp, userp, &ioctlp->req, &dscp, 0);
if (code)
return code;
- code = cm_IoctlStatMountPoint(&ioctlp->ioctl, userp, dscp, &req);
+ code = cm_IoctlStatMountPoint(&ioctlp->ioctl, userp, dscp, &ioctlp->req);
cm_ReleaseSCache(dscp);
{
afs_int32 code;
cm_scache_t *dscp;
- cm_req_t req;
-
- cm_InitReq(&req);
- code = RDR_ParseIoctlPath(ioctlp, userp, &req, &dscp, 0);
+ code = RDR_ParseIoctlPath(ioctlp, userp, &ioctlp->req, &dscp, 0);
if (code)
return code;
- code = cm_IoctlDeleteMountPoint(&ioctlp->ioctl, userp, dscp, &req);
+ code = cm_IoctlDeleteMountPoint(&ioctlp->ioctl, userp, dscp, &ioctlp->req);
cm_ReleaseSCache(dscp);
afs_int32 code;
cm_scache_t *dscp;
wchar_t leaf[LEAF_SIZE];
- cm_req_t req;
- cm_InitReq(&req);
-
- code = RDR_ParseIoctlParent(ioctlp, userp, &req, &dscp, leaf);
+ code = RDR_ParseIoctlParent(ioctlp, userp, &ioctlp->req, &dscp, leaf);
if (code)
return code;
- code = cm_IoctlCreateMountPoint(&ioctlp->ioctl, userp, dscp, &req, leaf);
+ code = cm_IoctlCreateMountPoint(&ioctlp->ioctl, userp, dscp, &ioctlp->req, leaf);
cm_ReleaseSCache(dscp);
return code;
afs_int32 code;
cm_scache_t *dscp;
wchar_t leaf[LEAF_SIZE];
- cm_req_t req;
-
- cm_InitReq(&req);
- code = RDR_ParseIoctlParent(ioctlp, userp, &req, &dscp, leaf);
+ code = RDR_ParseIoctlParent(ioctlp, userp, &ioctlp->req, &dscp, leaf);
if (code) return code;
- code = cm_IoctlSymlink(&ioctlp->ioctl, userp, dscp, &req, leaf);
+ code = cm_IoctlSymlink(&ioctlp->ioctl, userp, dscp, &ioctlp->req, leaf);
cm_ReleaseSCache(dscp);
{
afs_int32 code;
cm_scache_t *dscp;
- cm_req_t req;
- cm_InitReq(&req);
-
- code = RDR_ParseIoctlPath(ioctlp, userp, &req, &dscp, 0);
+ code = RDR_ParseIoctlPath(ioctlp, userp, &ioctlp->req, &dscp, 0);
if (code) return code;
- code = cm_IoctlListlink(&ioctlp->ioctl, userp, dscp, &req);
+ code = cm_IoctlListlink(&ioctlp->ioctl, userp, dscp, &ioctlp->req);
cm_ReleaseSCache(dscp);
return code;
{/*CHECK FOR VALID SYMLINK*/
afs_int32 code;
cm_scache_t *dscp;
- cm_req_t req;
-
- cm_InitReq(&req);
- code = RDR_ParseIoctlPath(ioctlp, userp, &req, &dscp, 0);
+ code = RDR_ParseIoctlPath(ioctlp, userp, &ioctlp->req, &dscp, 0);
if (code) return code;
- code = cm_IoctlIslink(&ioctlp->ioctl, userp, dscp, &req);
+ code = cm_IoctlIslink(&ioctlp->ioctl, userp, dscp, &ioctlp->req);
cm_ReleaseSCache(dscp);
{
afs_int32 code;
cm_scache_t *dscp;
- cm_req_t req;
- cm_InitReq(&req);
-
- code = RDR_ParseIoctlPath(ioctlp, userp, &req, &dscp, 0);
+ code = RDR_ParseIoctlPath(ioctlp, userp, &ioctlp->req, &dscp, 0);
if (code) return code;
- code = cm_IoctlDeletelink(&ioctlp->ioctl, userp, dscp, &req);
+ code = cm_IoctlDeletelink(&ioctlp->ioctl, userp, dscp, &ioctlp->req);
cm_ReleaseSCache(dscp);
{
afs_int32 code;
cm_scache_t *scp;
- cm_req_t req;
cm_ioctlQueryOptions_t *optionsp;
afs_uint32 flags = 0;
- cm_InitReq(&req);
-
optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
cm_SkipIoctlPath(&ioctlp->ioctl);
cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume,
optionsp->fid.vnode, optionsp->fid.unique);
- code = cm_GetSCache(&fid, NULL, &scp, userp, &req);
+ code = cm_GetSCache(&fid, NULL, &scp, userp, &ioctlp->req);
} else {
- code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+ code = RDR_ParseIoctlPath(ioctlp, userp, &ioctlp->req, &scp, flags);
}
if (code)
return code;
- code = cm_IoctlPathAvailability(&ioctlp->ioctl, userp, scp, &req);
+ code = cm_IoctlPathAvailability(&ioctlp->ioctl, userp, scp, &ioctlp->req);
cm_ReleaseSCache(scp);
return code;
}
afs_int32
RDR_IoctlVolStatTest(struct RDR_ioctl *ioctlp, struct cm_user *userp, afs_uint32 pflags)
{
- cm_req_t req;
-
- cm_InitReq(&req);
-
cm_SkipIoctlPath(&ioctlp->ioctl);
- return cm_IoctlVolStatTest(&ioctlp->ioctl, userp, &req);
+ return cm_IoctlVolStatTest(&ioctlp->ioctl, userp, &ioctlp->req);
}
/*
{
afs_int32 code;
cm_scache_t *scp;
- cm_req_t req;
cm_ioctlQueryOptions_t *optionsp;
afs_uint32 flags = 0;
- smb_InitReq(&req);
-
optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
if (optionsp) {
if (CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
cm_SkipIoctlPath(&ioctlp->ioctl);
cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume,
optionsp->fid.vnode, optionsp->fid.unique);
- code = cm_GetSCache(&fid, NULL, &scp, userp, &req);
+ code = cm_GetSCache(&fid, NULL, &scp, userp, &ioctlp->req);
} else {
- code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+ code = RDR_ParseIoctlPath(ioctlp, userp, &ioctlp->req, &scp, flags);
}
if (code)
return code;
cm_IoctlSkipQueryOptions(&ioctlp->ioctl, userp);
}
- code = cm_IoctlSetOwner(&ioctlp->ioctl, userp, scp, &req);
+ code = cm_IoctlSetOwner(&ioctlp->ioctl, userp, scp, &ioctlp->req);
cm_ReleaseSCache(scp);
{
afs_int32 code;
cm_scache_t *scp;
- cm_req_t req;
cm_ioctlQueryOptions_t *optionsp;
afs_uint32 flags = 0;
- smb_InitReq(&req);
-
optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
if (optionsp) {
if (CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
cm_SkipIoctlPath(&ioctlp->ioctl);
cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume,
optionsp->fid.vnode, optionsp->fid.unique);
- code = cm_GetSCache(&fid, NULL, &scp, userp, &req);
+ code = cm_GetSCache(&fid, NULL, &scp, userp, &ioctlp->req);
} else {
- code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+ code = RDR_ParseIoctlPath(ioctlp, userp, &ioctlp->req, &scp, flags);
}
if (code)
return code;
cm_IoctlSkipQueryOptions(&ioctlp->ioctl, userp);
}
- code = cm_IoctlSetGroup(&ioctlp->ioctl, userp, scp, &req);
+ code = cm_IoctlSetGroup(&ioctlp->ioctl, userp, scp, &ioctlp->req);
cm_ReleaseSCache(scp);
{
afs_int32 code;
cm_scache_t *scp;
- cm_req_t req;
cm_ioctlQueryOptions_t *optionsp;
afs_uint32 flags = 0;
- cm_InitReq(&req);
-
optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
cm_SkipIoctlPath(&ioctlp->ioctl);
cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume,
optionsp->fid.vnode, optionsp->fid.unique);
- code = cm_GetSCache(&fid, NULL, &scp, userp, &req);
+ code = cm_GetSCache(&fid, NULL, &scp, userp, &ioctlp->req);
} else {
- code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+ code = RDR_ParseIoctlPath(ioctlp, userp, &ioctlp->req, &scp, flags);
}
if (code)
return code;
- code = cm_IoctlGetUnixMode(&ioctlp->ioctl, userp, scp, &req);
+ code = cm_IoctlGetUnixMode(&ioctlp->ioctl, userp, scp, &ioctlp->req);
cm_ReleaseSCache(scp);
{
afs_int32 code;
cm_scache_t *scp;
- cm_req_t req;
cm_ioctlQueryOptions_t *optionsp;
afs_uint32 flags = 0;
- smb_InitReq(&req);
-
optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
if (optionsp) {
if (CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
cm_SkipIoctlPath(&ioctlp->ioctl);
cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume,
optionsp->fid.vnode, optionsp->fid.unique);
- code = cm_GetSCache(&fid, NULL, &scp, userp, &req);
+ code = cm_GetSCache(&fid, NULL, &scp, userp, &ioctlp->req);
} else {
- code = RDR_ParseIoctlPath(ioctlp, userp, &req, &scp, flags);
+ code = RDR_ParseIoctlPath(ioctlp, userp, &ioctlp->req, &scp, flags);
}
if (code)
return code;
cm_IoctlSkipQueryOptions(&ioctlp->ioctl, userp);
}
- code = cm_IoctlSetUnixMode(&ioctlp->ioctl, userp, scp, &req);
+ code = cm_IoctlSetUnixMode(&ioctlp->ioctl, userp, scp, &ioctlp->req);
cm_ReleaseSCache(scp);
return cm_IoctlSetVerifyData(&ioctlp->ioctl);
}
+
+afs_int32
+RDR_IoctlGetCallerAccess(struct RDR_ioctl *ioctlp, struct cm_user *userp, afs_uint32 pflags)
+{
+ afs_int32 code;
+ cm_scache_t *scp;
+ cm_ioctlQueryOptions_t * optionsp;
+ afs_uint32 flags = 0;
+
+ optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp);
+ if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp))
+ flags |= (optionsp->literal ? CM_PARSE_FLAG_LITERAL : 0);
+
+ if (optionsp && CM_IOCTL_QOPTS_HAVE_FID(optionsp)) {
+ cm_fid_t fid;
+ cm_SkipIoctlPath(&ioctlp->ioctl);
+ cm_SetFid(&fid, optionsp->fid.cell, optionsp->fid.volume,
+ optionsp->fid.vnode, optionsp->fid.unique);
+ code = cm_GetSCache(&fid, NULL, &scp, userp, &ioctlp->req);
+ } else {
+ code = RDR_ParseIoctlPath(ioctlp, userp, &ioctlp->req, &scp, flags);
+ }
+ if (code)
+ return code;
+
+ code = cm_IoctlGetCallerAccess(&ioctlp->ioctl, userp, scp, &ioctlp->req);
+
+ cm_ReleaseSCache(scp);
+
+ return code;
+}