From: Jeffrey Altman Date: Wed, 23 Jul 2008 22:40:34 +0000 (+0000) Subject: windows-cm-req-smb-20080723 X-Git-Tag: openafs-devel-1_5_61~941 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=70bfb2c59b0f989a643a51ceac1fca86ef50b5dc;p=packages%2Fo%2Fopenafs.git windows-cm-req-smb-20080723 LICENSE MIT Add smb_InitReq() calls cm_InitReq() and then sets the new CM_REQ_SOURCE_SMB flag. When this flag is set, the source of the request is known to be the SMB interface. This flag will not be set on requests generated by the various background daemons. --- diff --git a/src/WINNT/afsd/cm_conn.h b/src/WINNT/afsd/cm_conn.h index 26757a450..68b464ce2 100644 --- a/src/WINNT/afsd/cm_conn.h +++ b/src/WINNT/afsd/cm_conn.h @@ -54,6 +54,7 @@ typedef struct cm_req { /* flags in cm_req structure */ #define CM_REQ_NORETRY 0x1 #define CM_REQ_NEW_CONN_FORCED 0x2 +#define CM_REQ_SOURCE_SMB 0x4 /* * Vice2 error codes diff --git a/src/WINNT/afsd/smb.c b/src/WINNT/afsd/smb.c index ce2f719f1..4b270a7e7 100644 --- a/src/WINNT/afsd/smb.c +++ b/src/WINNT/afsd/smb.c @@ -190,6 +190,12 @@ int smb_ServerLanManagerLength = lengthof(smb_ServerLanManager); /* Faux server GUID. This is never checked. */ GUID smb_ServerGUID = { 0x40015cb8, 0x058a, 0x44fc, { 0xae, 0x7e, 0xbb, 0x29, 0x52, 0xee, 0x7e, 0xff }}; +void smb_InitReq(cm_req_t *reqp) +{ + cm_InitReq(reqp); + reqp->flags |= CM_REQ_SOURCE_SMB; +} + void smb_ResetServerPriority() { void * p = TlsGetValue(smb_TlsRequestSlot); @@ -1801,7 +1807,7 @@ int smb_FindShare(smb_vc_t *vcp, smb_user_t *uidp, /* attempt to locate a partial match in root.afs. This is because when using the ANSI RAP calls, the share name is limited to 13 chars and hence is truncated. Of course we prefer exact matches. */ - cm_InitReq(&req); + smb_InitReq(&req); thyper.HighPart = 0; thyper.LowPart = 0; @@ -3797,7 +3803,7 @@ void smb_WaitingLocksDaemon() scp = wlRequest->scp; osi_Log2(smb_logp,"smb_WaitingLocksDaemon wlRequest 0x%p scp 0x%p", wlRequest, scp); - cm_InitReq(&req); + smb_InitReq(&req); lock_ObtainWrite(&scp->rw); @@ -4250,7 +4256,7 @@ long smb_ReceiveCoreSearchDir(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *ou cm_fid_t fid; int fileType; - cm_InitReq(&req); + smb_InitReq(&req); maxCount = smb_GetSMBParm(inp, 0); @@ -4772,7 +4778,7 @@ long smb_ReceiveCoreCheckPath(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *ou cm_req_t req; char * pdata; - cm_InitReq(&req); + smb_InitReq(&req); pdata = smb_GetSMBData(inp, NULL); pathp = smb_ParseASCIIBlock(inp, pdata, NULL, SMB_STRF_ANSIPATH); @@ -4856,7 +4862,7 @@ long smb_ReceiveCoreSetFileAttributes(smb_vc_t *vcp, smb_packet_t *inp, smb_pack char * datap; cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); /* decode basic attributes we're passed */ attribute = smb_GetSMBParm(inp, 0); @@ -4972,7 +4978,7 @@ long smb_ReceiveCoreGetFileAttributes(smb_vc_t *vcp, smb_packet_t *inp, smb_pack char * datap; cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); datap = smb_GetSMBData(inp, NULL); pathp = smb_ParseASCIIBlock(inp, datap, NULL, SMB_STRF_ANSIPATH); @@ -5158,7 +5164,7 @@ long smb_ReceiveCoreOpen(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) char * datap; cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); datap = smb_GetSMBData(inp, NULL); pathp = smb_ParseASCIIBlock(inp, datap, NULL, SMB_STRF_ANSIPATH); @@ -5361,7 +5367,7 @@ long smb_ReceiveCoreUnlink(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) clientchar_t *tidPathp; cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); attribute = smb_GetSMBParm(inp, 0); @@ -5552,7 +5558,7 @@ smb_Rename(smb_vc_t *vcp, smb_packet_t *inp, clientchar_t * oldPathp, clientchar return CM_ERROR_NOSUCHPATH; } - cm_InitReq(&req); + smb_InitReq(&req); spacep = inp->spacep; smb_StripLastComponent(spacep->wdata, &oldLastNamep, oldPathp); @@ -5760,7 +5766,7 @@ smb_Link(smb_vc_t *vcp, smb_packet_t *inp, clientchar_t * oldPathp, clientchar_t return CM_ERROR_NOSUCHPATH; } - cm_InitReq(&req); + smb_InitReq(&req); caseFold = CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD; @@ -5970,7 +5976,7 @@ long smb_ReceiveCoreRemoveDir(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *ou clientchar_t *tidPathp; cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); tp = smb_GetSMBData(inp, NULL); pathp = smb_ParseASCIIBlock(inp, tp, &tp, SMB_STRF_ANSIPATH); @@ -6077,7 +6083,7 @@ long smb_ReceiveCoreFlush(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) long code = 0; cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); fid = smb_GetSMBParm(inp, 0); @@ -6208,7 +6214,7 @@ long smb_CloseFID(smb_vc_t *vcp, smb_fid_t *fidp, cm_user_t *userp, lock_ReleaseMutex(&fidp->mx); } - cm_InitReq(&req); + smb_InitReq(&req); lock_ObtainWrite(&smb_rctLock); if (fidp->deleteOk) { @@ -6448,7 +6454,7 @@ long smb_ReadData(smb_fid_t *fidp, osi_hyper_t *offsetp, afs_uint32 count, char goto done2; } - cm_InitReq(&req); + smb_InitReq(&req); bufferp = NULL; offset = *offsetp; @@ -6619,7 +6625,7 @@ long smb_WriteData(smb_fid_t *fidp, osi_hyper_t *offsetp, afs_uint32 count, char goto done2; } - cm_InitReq(&req); + smb_InitReq(&req); scp = fidp->scp; cm_HoldSCache(scp); @@ -6929,7 +6935,7 @@ long smb_ReceiveCoreWrite(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) osi_Log1(smb_logp, "smb_ReceiveCoreWrite truncation to length 0x%x", offset.LowPart); - cm_InitReq(&req); + smb_InitReq(&req); truncAttr.mask = CM_ATTRMASK_LENGTH; truncAttr.length.LowPart = offset.LowPart; @@ -7346,7 +7352,7 @@ long smb_ReceiveCoreMakeDir(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp clientchar_t *tidPathp; cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); scp = NULL; @@ -7469,7 +7475,7 @@ long smb_ReceiveCoreCreate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) cm_req_t req; int created = 0; /* the file was new */ - cm_InitReq(&req); + smb_InitReq(&req); scp = NULL; excl = (inp->inCom == 0x03)? 0 : 1; @@ -7658,7 +7664,7 @@ long smb_ReceiveCoreSeek(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) cm_user_t *userp; cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); fd = smb_GetSMBParm(inp, 0); whence = smb_GetSMBParm(inp, 1); diff --git a/src/WINNT/afsd/smb.h b/src/WINNT/afsd/smb.h index df1a64fcf..711aaa3a2 100644 --- a/src/WINNT/afsd/smb.h +++ b/src/WINNT/afsd/smb.h @@ -745,6 +745,7 @@ extern long smb_IsNetworkStarted(void); extern void smb_LanAdapterChange(int); extern void smb_SetLanAdapterChangeDetected(void); +extern void smb_InitReq(cm_req_t *reqp); #define SMB_LISTENER_UNINITIALIZED -1 #define SMB_LISTENER_STOPPED 0 diff --git a/src/WINNT/afsd/smb3.c b/src/WINNT/afsd/smb3.c index f3d55cc54..3744bce5d 100644 --- a/src/WINNT/afsd/smb3.c +++ b/src/WINNT/afsd/smb3.c @@ -1651,7 +1651,7 @@ long smb_ReceiveRAPNetShareEnum(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_ rootShares.cShare = 0; rootShares.shares = malloc( sizeof(smb_rap_share_info_0_t) * SMB_RAP_MAX_SHARES ); - cm_InitReq(&req); + smb_InitReq(&req); userp = smb_GetTran2User(vcp,p); @@ -1773,7 +1773,7 @@ long smb_ReceiveRAPNetShareGetInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_pack cm_user_t *userp; cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); tp = p->parmsp + 1; /* skip over function number (always 1) */ @@ -2249,7 +2249,7 @@ long smb_ReceiveTran2Open(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op) cm_req_t req; int created = 0; - cm_InitReq(&req); + smb_InitReq(&req); scp = NULL; @@ -2856,7 +2856,7 @@ long smb_ReceiveTran2QPathInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t clientchar_t *lastComp; cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); infoLevel = p->parmsp[0]; if (infoLevel == SMB_INFO_IS_NAME_VALID) @@ -3160,7 +3160,7 @@ long smb_ReceiveTran2SetPathInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet clientchar_t *tidPathp; clientchar_t *lastComp; - cm_InitReq(&req); + smb_InitReq(&req); infoLevel = p->parmsp[0]; osi_Log1(smb_logp,"ReceiveTran2SetPathInfo type 0x%x", infoLevel); @@ -3386,7 +3386,7 @@ long smb_ReceiveTran2QFileInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t int readlock = 0; cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); fid = p->parmsp[0]; fidp = smb_FindFID(vcp, fid, 0); @@ -3529,7 +3529,7 @@ long smb_ReceiveTran2SetFileInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet cm_scache_t *scp = NULL; cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); fid = p->parmsp[0]; fidp = smb_FindFID(vcp, fid, 0); @@ -3791,7 +3791,7 @@ smb_ReceiveTran2GetDFSReferral(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t int i, nbnLen, reqLen, refLen; int idx; - cm_InitReq(&req); + smb_InitReq(&req); maxReferralLevel = p->parmsp[0]; @@ -4283,7 +4283,7 @@ long smb_T2SearchDirSingle(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op void * attrp = NULL; smb_tran2Find_t * fp; - cm_InitReq(&req); + smb_InitReq(&req); eos = 0; osi_assertx(p->opcode == 1, "invalid opcode"); @@ -4751,7 +4751,7 @@ long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t char * s; smb_tran2Find_t * fp; - cm_InitReq(&req); + smb_InitReq(&req); eos = 0; if (p->opcode == 1) { @@ -5535,7 +5535,7 @@ long smb_ReceiveV3OpenX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) cm_req_t req; int created = 0; - cm_InitReq(&req); + smb_InitReq(&req); scp = NULL; @@ -5878,7 +5878,7 @@ long smb_ReceiveV3LockingX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) cm_key_t key; unsigned int pid; - cm_InitReq(&req); + smb_InitReq(&req); fid = smb_GetSMBParm(inp, 2); fid = smb_ChainFID(fid, inp); @@ -6164,7 +6164,7 @@ long smb_ReceiveV3GetAttributes(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t * cm_req_t req; int readlock = 0; - cm_InitReq(&req); + smb_InitReq(&req); fid = smb_GetSMBParm(inp, 0); fid = smb_ChainFID(fid, inp); @@ -6253,7 +6253,7 @@ long smb_ReceiveV3SetAttributes(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t * cm_attr_t attrs; cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); fid = smb_GetSMBParm(inp, 0); fid = smb_ChainFID(fid, inp); @@ -6642,7 +6642,7 @@ long smb_ReceiveNTCreateX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) int created = 0; cm_lock_data_t *ldp = NULL; - cm_InitReq(&req); + smb_InitReq(&req); /* This code is very long and has a lot of if-then-else clauses * scp and dscp get reused frequently and we need to ensure that @@ -7488,7 +7488,7 @@ long smb_ReceiveNTTranCreate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *out int created = 0; cm_lock_data_t *ldp = NULL; - cm_InitReq(&req); + smb_InitReq(&req); foundscp = FALSE; scp = NULL; diff --git a/src/WINNT/afsd/smb_ioctl.c b/src/WINNT/afsd/smb_ioctl.c index cc8870bdf..e4e598206 100644 --- a/src/WINNT/afsd/smb_ioctl.c +++ b/src/WINNT/afsd/smb_ioctl.c @@ -1086,7 +1086,7 @@ smb_IoctlGetACL(smb_ioctl_t *ioctlp, cm_user_t *userp) cm_ioctlQueryOptions_t *optionsp; afs_uint32 flags = 0; - cm_InitReq(&req); + smb_InitReq(&req); optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp); if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp)) @@ -1119,7 +1119,7 @@ smb_IoctlSetACL(smb_ioctl_t *ioctlp, cm_user_t *userp) cm_ioctlQueryOptions_t *optionsp; afs_uint32 flags = 0; - cm_InitReq(&req); + smb_InitReq(&req); code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, flags); if (code) @@ -1140,7 +1140,7 @@ smb_IoctlGetFileCellName(struct smb_ioctl *ioctlp, struct cm_user *userp) cm_ioctlQueryOptions_t *optionsp; afs_uint32 flags = 0; - cm_InitReq(&req); + smb_InitReq(&req); optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp); if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp)) @@ -1170,7 +1170,7 @@ smb_IoctlFlushAllVolumes(struct smb_ioctl *ioctlp, struct cm_user *userp) { cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); cm_SkipIoctlPath(&ioctlp->ioctl); /* we don't care about the path */ @@ -1186,7 +1186,7 @@ smb_IoctlFlushVolume(struct smb_ioctl *ioctlp, struct cm_user *userp) cm_ioctlQueryOptions_t *optionsp; afs_uint32 flags = 0; - cm_InitReq(&req); + smb_InitReq(&req); optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp); if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp)) @@ -1220,7 +1220,7 @@ smb_IoctlFlushFile(struct smb_ioctl *ioctlp, struct cm_user *userp) cm_ioctlQueryOptions_t *optionsp; afs_uint32 flags = 0; - cm_InitReq(&req); + smb_InitReq(&req); optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp); if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp)) @@ -1251,7 +1251,7 @@ smb_IoctlSetVolumeStatus(struct smb_ioctl *ioctlp, struct cm_user *userp) cm_scache_t *scp; cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); code = smb_ParseIoctlPath(ioctlp, userp, &req, &scp, 0); if (code) return code; @@ -1271,7 +1271,7 @@ smb_IoctlGetVolumeStatus(struct smb_ioctl *ioctlp, struct cm_user *userp) afs_uint32 flags = 0; cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp); if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp)) @@ -1305,7 +1305,7 @@ smb_IoctlGetFid(struct smb_ioctl *ioctlp, struct cm_user *userp) cm_ioctlQueryOptions_t * optionsp; afs_uint32 flags = 0; - cm_InitReq(&req); + smb_InitReq(&req); optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp); if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp)) @@ -1331,7 +1331,7 @@ smb_IoctlGetFileType(struct smb_ioctl *ioctlp, struct cm_user *userp) cm_ioctlQueryOptions_t * optionsp; afs_uint32 flags = 0; - cm_InitReq(&req); + smb_InitReq(&req); optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp); if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp)) @@ -1365,7 +1365,7 @@ smb_IoctlGetOwner(struct smb_ioctl *ioctlp, struct cm_user *userp) cm_ioctlQueryOptions_t *optionsp; afs_uint32 flags = 0; - cm_InitReq(&req); + smb_InitReq(&req); optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp); if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp)) @@ -1399,7 +1399,7 @@ smb_IoctlWhereIs(struct smb_ioctl *ioctlp, struct cm_user *userp) cm_ioctlQueryOptions_t *optionsp; afs_uint32 flags = 0; - cm_InitReq(&req); + smb_InitReq(&req); optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp); if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp)) @@ -1432,7 +1432,7 @@ smb_IoctlStatMountPoint(struct smb_ioctl *ioctlp, struct cm_user *userp) cm_scache_t *dscp; cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); code = smb_ParseIoctlPath(ioctlp, userp, &req, &dscp, 0); if (code) @@ -1452,7 +1452,7 @@ smb_IoctlDeleteMountPoint(struct smb_ioctl *ioctlp, struct cm_user *userp) cm_scache_t *dscp; cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); code = smb_ParseIoctlPath(ioctlp, userp, &req, &dscp, 0); if (code) @@ -1593,7 +1593,7 @@ smb_IoctlCreateMountPoint(struct smb_ioctl *ioctlp, struct cm_user *userp) clientchar_t leaf[LEAF_SIZE]; cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); code = smb_ParseIoctlParent(ioctlp, userp, &req, &dscp, leaf); if (code) @@ -1613,7 +1613,7 @@ smb_IoctlSymlink(struct smb_ioctl *ioctlp, struct cm_user *userp) clientchar_t leaf[LEAF_SIZE]; cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); code = smb_ParseIoctlParent(ioctlp, userp, &req, &dscp, leaf); if (code) return code; @@ -1632,7 +1632,7 @@ smb_IoctlListlink(struct smb_ioctl *ioctlp, struct cm_user *userp) cm_scache_t *dscp; cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); code = smb_ParseIoctlPath(ioctlp, userp, &req, &dscp, 0); if (code) return code; @@ -1650,7 +1650,7 @@ smb_IoctlIslink(struct smb_ioctl *ioctlp, struct cm_user *userp) cm_scache_t *dscp; cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); code = smb_ParseIoctlPath(ioctlp, userp, &req, &dscp, 0); if (code) return code; @@ -1669,7 +1669,7 @@ smb_IoctlDeletelink(struct smb_ioctl *ioctlp, struct cm_user *userp) cm_scache_t *dscp; cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); code = smb_ParseIoctlPath(ioctlp, userp, &req, &dscp, 0); if (code) return code; @@ -1791,7 +1791,7 @@ smb_IoctlPathAvailability(struct smb_ioctl *ioctlp, struct cm_user *userp) cm_ioctlQueryOptions_t *optionsp; afs_uint32 flags = 0; - cm_InitReq(&req); + smb_InitReq(&req); optionsp = cm_IoctlGetQueryOptions(&ioctlp->ioctl, userp); if (optionsp && CM_IOCTL_QOPTS_HAVE_LITERAL(optionsp)) @@ -1819,7 +1819,7 @@ smb_IoctlVolStatTest(struct smb_ioctl *ioctlp, struct cm_user *userp) { cm_req_t req; - cm_InitReq(&req); + smb_InitReq(&req); cm_SkipIoctlPath(&ioctlp->ioctl);