From: Jeffrey Altman Date: Sun, 9 Apr 2006 08:29:37 +0000 (+0000) Subject: STABLE14-windows-getvolstatus-20060408 X-Git-Tag: openafs-stable-1_4_1~8 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=4f166f64e4a37ea4d476d3a528d4febfa01740c3;p=packages%2Fo%2Fopenafs.git STABLE14-windows-getvolstatus-20060408 don't prevent all calls to getvolstatus, just the ones that are not AFS pioctl calls. (cherry picked from commit 632d0c701b31877b4d74f5f3849a5a8054f7326a) --- diff --git a/src/WINNT/afsd/cm_ioctl.c b/src/WINNT/afsd/cm_ioctl.c index f50472a6b..c07834209 100644 --- a/src/WINNT/afsd/cm_ioctl.c +++ b/src/WINNT/afsd/cm_ioctl.c @@ -2200,6 +2200,11 @@ long cm_IoctlDelToken(struct smb_ioctl *ioctlp, struct cm_user *userp) free(ucellp->ticketp); ucellp->ticketp = NULL; } + ucellp->ticketLen = 0; + memset(ucellp->sessionKey.data, 0, 8); + ucellp->kvno = 0; + ucellp->expirationTime = 0; + ucellp->userName[0] = '\0'; ucellp->flags &= ~CM_UCELLFLAG_RXKAD; ucellp->gen++; @@ -2218,6 +2223,16 @@ long cm_IoctlDelAllToken(struct smb_ioctl *ioctlp, struct cm_user *userp) for (ucellp = userp->cellInfop; ucellp; ucellp = ucellp->nextp) { osi_Log1(smb_logp,"cm_IoctlDelAllToken ucellp %lx", ucellp); + + if (ucellp->ticketp) { + free(ucellp->ticketp); + ucellp->ticketp = NULL; + } + ucellp->ticketLen = 0; + memset(ucellp->sessionKey.data, 0, 8); + ucellp->kvno = 0; + ucellp->expirationTime = 0; + ucellp->userName[0] = '\0'; ucellp->flags &= ~CM_UCELLFLAG_RXKAD; ucellp->gen++; } diff --git a/src/WINNT/afsd/smb_ioctl.c b/src/WINNT/afsd/smb_ioctl.c index b9184d729..5d73103da 100644 --- a/src/WINNT/afsd/smb_ioctl.c +++ b/src/WINNT/afsd/smb_ioctl.c @@ -40,14 +40,8 @@ void smb_InitIoctl(void) smb_ioctlProcsp[VIOCSETAL] = cm_IoctlSetACL; smb_ioctlProcsp[VIOC_FLUSHVOLUME] = cm_IoctlFlushVolume; smb_ioctlProcsp[VIOCFLUSH] = cm_IoctlFlushFile; -#ifdef COMMENT - /* This functions do not return the data expected by the - * Windows CIFS client. Calling them only increases the - * number of roundtrips to the file server with no benefit. - */ smb_ioctlProcsp[VIOCSETVOLSTAT] = cm_IoctlSetVolumeStatus; smb_ioctlProcsp[VIOCGETVOLSTAT] = cm_IoctlGetVolumeStatus; -#endif smb_ioctlProcsp[VIOCWHEREIS] = cm_IoctlWhereIs; smb_ioctlProcsp[VIOC_AFS_STAT_MT_PT] = cm_IoctlStatMountPoint; smb_ioctlProcsp[VIOC_AFS_DELETE_MT_PT] = cm_IoctlDeleteMountPoint; @@ -122,7 +116,7 @@ void smb_SetupIoctlFid(smb_fid_t *fidp, cm_space_t *prefix) smb_IoctlPrepareRead(smb_fid_t *fidp, smb_ioctl_t *ioctlp, cm_user_t *userp) { long opcode; - smb_ioctlProc_t *procp; + smb_ioctlProc_t *procp = NULL; long code; if (ioctlp->flags & SMB_IOCTLFLAG_DATAIN) { @@ -143,7 +137,11 @@ smb_IoctlPrepareRead(smb_fid_t *fidp, smb_ioctl_t *ioctlp, cm_user_t *userp) return CM_ERROR_TOOBIG; /* check for no such proc */ - procp = smb_ioctlProcsp[opcode]; + if (fidp->flags & SMB_FID_IOCTL) + procp = smb_ioctlProcsp[opcode]; + else + procp = NULL; + if (procp == NULL) return CM_ERROR_BADOP;