From 687a40c7c6f3e0391ec1c863113c22f970003b49 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Thu, 20 Aug 2009 10:54:47 -0400 Subject: [PATCH] Windows: cleanup smb polution of non-smb modules There are a variety of functions that are declared in smb modules that are used within non-smb modules. In order to reduce some of the polution, several time conversion functions and the thread priority operations are migrated to cm_utils. As part of this migration the unused !USE_NUMERIC_TIME_CONV time implementations are removed. In addition, an unnecessary use of an SMB preprocessor symbols is removed from cm_freelance.c and smb_ioctls.h is no longer included within afsd.h. LICENSE MIT Reviewed-on: http://gerrit.openafs.org/330 Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- src/WINNT/afsd/afsd.h | 3 +- src/WINNT/afsd/afsd_init.c | 4 + src/WINNT/afsd/cm_buf.c | 2 +- src/WINNT/afsd/cm_cell.c | 2 +- src/WINNT/afsd/cm_freelance.c | 2 +- src/WINNT/afsd/cm_scache.c | 2 +- src/WINNT/afsd/cm_utils.c | 131 ++++++++++++++++++- src/WINNT/afsd/cm_utils.h | 21 ++++ src/WINNT/afsd/smb.c | 230 +--------------------------------- src/WINNT/afsd/smb.h | 11 -- src/WINNT/afsd/smb3.c | 32 ++--- src/util/errmap_nt.h | 8 +- 12 files changed, 183 insertions(+), 265 deletions(-) diff --git a/src/WINNT/afsd/afsd.h b/src/WINNT/afsd/afsd.h index 9970867a1..2176154fc 100644 --- a/src/WINNT/afsd/afsd.h +++ b/src/WINNT/afsd/afsd.h @@ -53,13 +53,12 @@ BOOL APIENTRY About(HWND, unsigned int, unsigned int, long); #include "cm_btree.h" #include "cm_daemon.h" #include "cm_ioctl.h" +#include "smb_iocons.h" #include "cm_dnlc.h" #include "cm_buf.h" #include "cm_memmap.h" #include "cm_freelance.h" #include "cm_performance.h" -#include "smb_ioctl.h" -#include "smb_iocons.h" #include "afsd_init.h" #include "afsd_eventlog.h" diff --git a/src/WINNT/afsd/afsd_init.c b/src/WINNT/afsd/afsd_init.c index 0ec72b8c4..ab38b5523 100644 --- a/src/WINNT/afsd/afsd_init.c +++ b/src/WINNT/afsd/afsd_init.c @@ -523,6 +523,8 @@ afsd_InitCM(char **reasonP) init_et_to_sys_error(); + cm_utilsInit(); + /* setup osidebug server at RPC slot 1000 */ osi_LongToUID(1000, &debugID); code = osi_InitDebug(&debugID); @@ -1377,6 +1379,8 @@ int afsd_ShutdownCM(void) cm_ReleaseSCache(cm_data.rootSCachep); + cm_utilsCleanup(); + cm_shutdown = 1; return 0; diff --git a/src/WINNT/afsd/cm_buf.c b/src/WINNT/afsd/cm_buf.c index 5b37eed10..6010f431c 100644 --- a/src/WINNT/afsd/cm_buf.c +++ b/src/WINNT/afsd/cm_buf.c @@ -610,7 +610,7 @@ void buf_WaitIO(cm_scache_t * scp, cm_buf_t *bp) } osi_SleepM((LONG_PTR)bp, &bp->mx); - smb_UpdateServerPriority(); + cm_UpdateServerPriority(); lock_ObtainMutex(&bp->mx); osi_Log1(buf_logp, "buf_WaitIO conflict wait done for 0x%p", bp); diff --git a/src/WINNT/afsd/cm_cell.c b/src/WINNT/afsd/cm_cell.c index 88783a938..c166bba1e 100644 --- a/src/WINNT/afsd/cm_cell.c +++ b/src/WINNT/afsd/cm_cell.c @@ -177,7 +177,7 @@ cm_cell_t *cm_GetCell_Gen(char *namep, char *newnamep, afs_uint32 flags) cm_cell_rock_t rock; size_t len; - if (namep == NULL || !namep[0] || !strcmp(namep,SMB_IOCTL_FILENAME_NOSLASH)) + if (namep == NULL || !namep[0] || !strcmp(namep,CM_IOCTL_FILENAME_NOSLASH)) return NULL; /* diff --git a/src/WINNT/afsd/cm_freelance.c b/src/WINNT/afsd/cm_freelance.c index e557a095d..b117bc704 100644 --- a/src/WINNT/afsd/cm_freelance.c +++ b/src/WINNT/afsd/cm_freelance.c @@ -490,7 +490,7 @@ long cm_InitLocalMountPoints() { &ftLastWriteTime /* lpftLastWriteTime */ ); - smb_UnixTimeFromLargeSearchTime(&FakeFreelanceModTime, &ftLastWriteTime); + cm_UnixTimeFromLargeSearchTime(&FakeFreelanceModTime, &ftLastWriteTime); if ( dwMountPoints == 0 ) { rootCellName[0] = '.'; diff --git a/src/WINNT/afsd/cm_scache.c b/src/WINNT/afsd/cm_scache.c index 3f64b83fe..0fafcf577 100644 --- a/src/WINNT/afsd/cm_scache.c +++ b/src/WINNT/afsd/cm_scache.c @@ -1315,7 +1315,7 @@ long cm_SyncOp(cm_scache_t *scp, cm_buf_t *bufp, cm_user_t *userp, cm_req_t *req lock_ObtainWrite(&scp->rw); } while (!cm_SyncOpCheckContinue(scp, flags, bufp)); - smb_UpdateServerPriority(); + cm_UpdateServerPriority(); scp->waitCount--; osi_Log3(afsd_logp, "CM SyncOp woke! scp 0x%p; still waiting %d threads of %d requests", diff --git a/src/WINNT/afsd/cm_utils.c b/src/WINNT/afsd/cm_utils.c index 3296f24f8..7875ad8bd 100644 --- a/src/WINNT/afsd/cm_utils.c +++ b/src/WINNT/afsd/cm_utils.c @@ -33,6 +33,24 @@ cm_space_t *cm_spaceListp; static int et2sys[512]; +static DWORD cm_TlsRequestSlot = -1; + +void cm_utilsInit(void) +{ + if (osi_Once(&cm_utilsOnce)) { + lock_InitializeRWLock(&cm_utilsLock, "cm_utilsLock", LOCK_HIERARCHY_UTILS_GLOBAL); + + cm_TlsRequestSlot = TlsAlloc(); + + osi_EndOnce(&cm_utilsOnce); + } +} + +void cm_utilsCleanup(void) +{ + TlsFree(cm_TlsRequestSlot); +} + void init_et_to_sys_error(void) { @@ -293,11 +311,8 @@ cm_space_t *cm_GetSpace(void) { cm_space_t *tsp; - if (osi_Once(&cm_utilsOnce)) { - lock_InitializeRWLock(&cm_utilsLock, "cm_utilsLock", LOCK_HIERARCHY_UTILS_GLOBAL); - osi_EndOnce(&cm_utilsOnce); - } - + cm_utilsInit(); + lock_ObtainWrite(&cm_utilsLock); if (tsp = cm_spaceListp) { cm_spaceListp = tsp->nextp; @@ -914,3 +929,109 @@ BOOL msftSMBRedirectorSupportsExtendedTimeouts(void) return fSupportsExtendedTimeouts; } +void cm_ResetServerPriority() +{ + void * p = TlsGetValue(cm_TlsRequestSlot); + if (p) { + free(p); + TlsSetValue(cm_TlsRequestSlot, NULL); + SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_NORMAL); + } +} + +void cm_SetRequestStartTime() +{ + time_t * tp = TlsGetValue(cm_TlsRequestSlot); + if (!tp) + tp = malloc(sizeof(time_t)); + if (tp) { + *tp = osi_Time(); + + if (!TlsSetValue(cm_TlsRequestSlot, tp)) + free(tp); + } +} + +void cm_UpdateServerPriority() +{ + time_t *tp = TlsGetValue(cm_TlsRequestSlot); + + if (tp) { + time_t now = osi_Time(); + + /* Give one priority boost for each 15 seconds */ + SetThreadPriority(GetCurrentThread(), (int)((now - *tp) / 15)); + } +} + + +void cm_LargeSearchTimeFromUnixTime(FILETIME *largeTimep, time_t unixTime) +{ + // Note that LONGLONG is a 64-bit value + LONGLONG ll; + + ll = Int32x32To64(unixTime, 10000000) + 116444736000000000; + largeTimep->dwLowDateTime = (DWORD)(ll & 0xFFFFFFFF); + largeTimep->dwHighDateTime = (DWORD)(ll >> 32); +} + +void cm_UnixTimeFromLargeSearchTime(time_t *unixTimep, FILETIME *largeTimep) +{ + // Note that LONGLONG is a 64-bit value + LONGLONG ll; + + ll = largeTimep->dwHighDateTime; + ll <<= 32; + ll += largeTimep->dwLowDateTime; + + ll -= 116444736000000000; + ll /= 10000000; + + *unixTimep = (DWORD)ll; +} + +void cm_SearchTimeFromUnixTime(afs_uint32 *searchTimep, time_t unixTime) +{ + struct tm *ltp; + int dosDate; + int dosTime; + struct tm localJunk; + time_t t = unixTime; + + ltp = localtime(&t); + + /* if we fail, make up something */ + if (!ltp) { + ltp = &localJunk; + localJunk.tm_year = 89 - 20; + localJunk.tm_mon = 4; + localJunk.tm_mday = 12; + localJunk.tm_hour = 0; + localJunk.tm_min = 0; + localJunk.tm_sec = 0; + } + + dosDate = ((ltp->tm_year-80)<<9) | ((ltp->tm_mon+1) << 5) | (ltp->tm_mday); + dosTime = (ltp->tm_hour<<11) | (ltp->tm_min << 5) | (ltp->tm_sec / 2); + *searchTimep = (dosDate<<16) | dosTime; +} + +void cm_UnixTimeFromSearchTime(time_t *unixTimep, afs_uint32 searchTime) +{ + unsigned short dosDate; + unsigned short dosTime; + struct tm localTm; + + dosDate = (unsigned short) (searchTime & 0xffff); + dosTime = (unsigned short) ((searchTime >> 16) & 0xffff); + + localTm.tm_year = 80 + ((dosDate>>9) & 0x3f); + localTm.tm_mon = ((dosDate >> 5) & 0xf) - 1; /* January is 0 in localTm */ + localTm.tm_mday = (dosDate) & 0x1f; + localTm.tm_hour = (dosTime>>11) & 0x1f; + localTm.tm_min = (dosTime >> 5) & 0x3f; + localTm.tm_sec = (dosTime & 0x1f) * 2; + localTm.tm_isdst = -1; /* compute whether DST in effect */ + + *unixTimep = mktime(&localTm); +} diff --git a/src/WINNT/afsd/cm_utils.h b/src/WINNT/afsd/cm_utils.h index 653ff96be..5a7a33e75 100644 --- a/src/WINNT/afsd/cm_utils.h +++ b/src/WINNT/afsd/cm_utils.h @@ -89,4 +89,25 @@ extern BOOL cm_GetOSFileVersion(char *filename, LARGE_INTEGER *liVer); extern BOOL msftSMBRedirectorSupportsExtendedTimeouts(void); +/* thread priority */ +extern void cm_UpdateServerPriority(void); + +extern void cm_SetRequestStartTime(void); + +extern void cm_ResetServerPriority(void); + +/* time related functions */ + +extern void cm_LargeSearchTimeFromUnixTime(FILETIME *largeTimep, time_t unixTime); + +extern void cm_UnixTimeFromLargeSearchTime(time_t *unixTimep, FILETIME *largeTimep); + +extern void cm_SearchTimeFromUnixTime(afs_uint32 *searchTimep, time_t unixTime); + +extern void cm_UnixTimeFromSearchTime(time_t *unixTimep, afs_uint32 searchTime); + +extern void cm_utilsInit(void); + +extern void cm_utilsCleanup(void); + #endif /* __CM_UTILS_H_ENV__ */ diff --git a/src/WINNT/afsd/smb.c b/src/WINNT/afsd/smb.c index e35f11313..e7151ae10 100644 --- a/src/WINNT/afsd/smb.c +++ b/src/WINNT/afsd/smb.c @@ -154,13 +154,6 @@ int (_stdcall *smb_MBfunc)(HWND, LPCTSTR, LPCTSTR, UINT) */ time_t smb_localZero = 0; -#define USE_NUMERIC_TIME_CONV 1 - -#ifndef USE_NUMERIC_TIME_CONV -/* Time difference for converting to kludge-GMT */ -afs_uint32 smb_NowTZ; -#endif /* USE_NUMERIC_TIME_CONV */ - char *smb_localNamep = NULL; smb_vc_t *smb_allVCsp; @@ -170,8 +163,6 @@ smb_username_t *usernamesp = NULL; smb_waitingLockRequest_t *smb_allWaitingLocks; -DWORD smb_TlsRequestSlot = -1; - /* forward decl */ void smb_DispatchPacket(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp, NCB *ncbp, raw_write_cont_t *rwcp); @@ -197,42 +188,6 @@ void smb_InitReq(cm_req_t *reqp) reqp->flags |= CM_REQ_SOURCE_SMB; } -void smb_ResetServerPriority() -{ - void * p = TlsGetValue(smb_TlsRequestSlot); - if (p) { - free(p); - TlsSetValue(smb_TlsRequestSlot, NULL); - SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_NORMAL); - } -} - -void smb_SetRequestStartTime() -{ - time_t * tp = TlsGetValue(smb_TlsRequestSlot); - if (!tp) - tp = malloc(sizeof(time_t)); - if (tp) { - *tp = osi_Time(); - - if (!TlsSetValue(smb_TlsRequestSlot, tp)) - free(tp); - } -} - -void smb_UpdateServerPriority() -{ - time_t *tp = TlsGetValue(smb_TlsRequestSlot); - - if (tp) { - time_t now = osi_Time(); - - /* Give one priority boost for each 15 seconds */ - SetThreadPriority(GetCurrentThread(), (int)((now - *tp) / 15)); - } -} - - const char * ncb_error_string(int code) { const char * s; @@ -581,7 +536,7 @@ void ShowUnixTime(char *FuncName, time_t unixTime) FILETIME ft; WORD wDate, wTime; - smb_LargeSearchTimeFromUnixTime(&ft, unixTime); + cm_LargeSearchTimeFromUnixTime(&ft, unixTime); if (!FileTimeToDosDateTime(&ft, &wDate, &wTime)) osi_Log1(smb_logp, "Failed to convert filetime to dos datetime: %d", GetLastError()); @@ -682,169 +637,6 @@ void CompensateForSmbClientLastWriteTimeBugs(afs_uint32 *pLastWriteTime) *pLastWriteTime -= (-bias * 60); /* Convert bias to seconds */ } -#ifndef USE_NUMERIC_TIME_CONV -/* - * Calculate the difference (in seconds) between local time and GMT. - * This enables us to convert file times to kludge-GMT. - */ -static void -smb_CalculateNowTZ() -{ - time_t t; - struct tm gmt_tm, local_tm; - int days, hours, minutes, seconds; - - t = time(NULL); - gmt_tm = *(gmtime(&t)); - local_tm = *(localtime(&t)); - - days = local_tm.tm_yday - gmt_tm.tm_yday; - hours = 24 * days + local_tm.tm_hour - gmt_tm.tm_hour; - minutes = 60 * hours + local_tm.tm_min - gmt_tm.tm_min; - seconds = 60 * minutes + local_tm.tm_sec - gmt_tm.tm_sec; - - smb_NowTZ = seconds; -} -#endif /* USE_NUMERIC_TIME_CONV */ - -#ifdef USE_NUMERIC_TIME_CONV -void smb_LargeSearchTimeFromUnixTime(FILETIME *largeTimep, time_t unixTime) -{ - // Note that LONGLONG is a 64-bit value - LONGLONG ll; - - ll = Int32x32To64(unixTime, 10000000) + 116444736000000000; - largeTimep->dwLowDateTime = (DWORD)(ll & 0xFFFFFFFF); - largeTimep->dwHighDateTime = (DWORD)(ll >> 32); -} -#else -void smb_LargeSearchTimeFromUnixTime(FILETIME *largeTimep, time_t unixTime) -{ - struct tm *ltp; - SYSTEMTIME stm; - struct tm localJunk; - time_t ersatz_unixTime; - - /* - * Must use kludge-GMT instead of real GMT. - * kludge-GMT is computed by adding time zone difference to localtime. - * - * real GMT would be: - * ltp = gmtime(&unixTime); - */ - ersatz_unixTime = unixTime - smb_NowTZ; - ltp = localtime(&ersatz_unixTime); - - /* if we fail, make up something */ - if (!ltp) { - ltp = &localJunk; - localJunk.tm_year = 89 - 20; - localJunk.tm_mon = 4; - localJunk.tm_mday = 12; - localJunk.tm_hour = 0; - localJunk.tm_min = 0; - localJunk.tm_sec = 0; - } - - stm.wYear = ltp->tm_year + 1900; - stm.wMonth = ltp->tm_mon + 1; - stm.wDayOfWeek = ltp->tm_wday; - stm.wDay = ltp->tm_mday; - stm.wHour = ltp->tm_hour; - stm.wMinute = ltp->tm_min; - stm.wSecond = ltp->tm_sec; - stm.wMilliseconds = 0; - - SystemTimeToFileTime(&stm, largeTimep); -} -#endif /* USE_NUMERIC_TIME_CONV */ - -#ifdef USE_NUMERIC_TIME_CONV -void smb_UnixTimeFromLargeSearchTime(time_t *unixTimep, FILETIME *largeTimep) -{ - // Note that LONGLONG is a 64-bit value - LONGLONG ll; - - ll = largeTimep->dwHighDateTime; - ll <<= 32; - ll += largeTimep->dwLowDateTime; - - ll -= 116444736000000000; - ll /= 10000000; - - *unixTimep = (DWORD)ll; -} -#else /* USE_NUMERIC_TIME_CONV */ -void smb_UnixTimeFromLargeSearchTime(time_t *unixTimep, FILETIME *largeTimep) -{ - SYSTEMTIME stm; - struct tm lt; - long save_timezone; - - FileTimeToSystemTime(largeTimep, &stm); - - lt.tm_year = stm.wYear - 1900; - lt.tm_mon = stm.wMonth - 1; - lt.tm_wday = stm.wDayOfWeek; - lt.tm_mday = stm.wDay; - lt.tm_hour = stm.wHour; - lt.tm_min = stm.wMinute; - lt.tm_sec = stm.wSecond; - lt.tm_isdst = -1; - - save_timezone = _timezone; - _timezone += smb_NowTZ; - *unixTimep = mktime(<); - _timezone = save_timezone; -} -#endif /* USE_NUMERIC_TIME_CONV */ - -void smb_SearchTimeFromUnixTime(afs_uint32 *searchTimep, time_t unixTime) -{ - struct tm *ltp; - int dosDate; - int dosTime; - struct tm localJunk; - time_t t = unixTime; - - ltp = localtime(&t); - - /* if we fail, make up something */ - if (!ltp) { - ltp = &localJunk; - localJunk.tm_year = 89 - 20; - localJunk.tm_mon = 4; - localJunk.tm_mday = 12; - localJunk.tm_hour = 0; - localJunk.tm_min = 0; - localJunk.tm_sec = 0; - } - - dosDate = ((ltp->tm_year-80)<<9) | ((ltp->tm_mon+1) << 5) | (ltp->tm_mday); - dosTime = (ltp->tm_hour<<11) | (ltp->tm_min << 5) | (ltp->tm_sec / 2); - *searchTimep = (dosDate<<16) | dosTime; -} - -void smb_UnixTimeFromSearchTime(time_t *unixTimep, afs_uint32 searchTime) -{ - unsigned short dosDate; - unsigned short dosTime; - struct tm localTm; - - dosDate = (unsigned short) (searchTime & 0xffff); - dosTime = (unsigned short) ((searchTime >> 16) & 0xffff); - - localTm.tm_year = 80 + ((dosDate>>9) & 0x3f); - localTm.tm_mon = ((dosDate >> 5) & 0xf) - 1; /* January is 0 in localTm */ - localTm.tm_mday = (dosDate) & 0x1f; - localTm.tm_hour = (dosTime>>11) & 0x1f; - localTm.tm_min = (dosTime >> 5) & 0x3f; - localTm.tm_sec = (dosTime & 0x1f) * 2; - localTm.tm_isdst = -1; /* compute whether DST in effect */ - - *unixTimep = mktime(&localTm); -} - void smb_DosUTimeFromUnixTime(afs_uint32 *dosUTimep, time_t unixTime) { time_t diff_t = unixTime - smb_localZero; @@ -4014,7 +3806,7 @@ long smb_ReceiveNegotiate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) smb_SetSMBParmLong(outp, 9, caps); time(&unixTime); - smb_SearchTimeFromUnixTime(&dosTime, unixTime); + cm_SearchTimeFromUnixTime(&dosTime, unixTime); smb_SetSMBParmLong(outp, 11, LOWORD(dosTime));/* server time */ smb_SetSMBParmLong(outp, 13, HIWORD(dosTime));/* server date */ @@ -4074,7 +3866,7 @@ long smb_ReceiveNegotiate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) smb_SetSMBParm(outp, 6, 1); /* next 2: session key */ smb_SetSMBParm(outp, 7, 1); time(&unixTime); - smb_SearchTimeFromUnixTime(&dosTime, unixTime); + cm_SearchTimeFromUnixTime(&dosTime, unixTime); smb_SetSMBParm(outp, 8, LOWORD(dosTime)); /* server time */ smb_SetSMBParm(outp, 9, HIWORD(dosTime)); /* server date */ @@ -4189,9 +3981,6 @@ void smb_Daemon(void *parmp) myTime.tm_sec = 0; smb_localZero = mktime(&myTime); -#ifndef USE_NUMERIC_TIME_CONV - smb_CalculateNowTZ(); -#endif /* USE_NUMERIC_TIME_CONV */ #ifdef AFS_FREELANCE if ( smb_localZero != old_localZero ) cm_noteLocalMountPointChange(); @@ -4802,7 +4591,7 @@ smb_ApplyDirListPatches(cm_scache_t * dscp, smb_dirListPatch_t **dirPatchespp, *dptr++ = attr; /* get dos time */ - smb_SearchTimeFromUnixTime(&dosTime, scp->clientModTime); + cm_SearchTimeFromUnixTime(&dosTime, scp->clientModTime); /* copy out time */ shortTemp = (unsigned short) (dosTime & 0xffff); @@ -8996,7 +8785,7 @@ void smb_Server(VOID *parmp) vcp = NULL; } - smb_ResetServerPriority(); + cm_ResetServerPriority(); code = thrd_WaitForMultipleObjects_Event(numNCBs, NCBreturns[myIdx], FALSE, INFINITE); @@ -9183,7 +8972,7 @@ void smb_Server(VOID *parmp) continue; } - smb_SetRequestStartTime(); + cm_SetRequestStartTime(); vcp->errorCount = 0; bufp = (struct smb_packet *) ncbp->ncb_buffer; @@ -10366,8 +10155,6 @@ void smb_Init(osi_log_t *logp, int useV3, char eventName[MAX_PATH]; int startListeners = 0; - smb_TlsRequestSlot = TlsAlloc(); - smb_MBfunc = aMBfunc; smb_useV3 = useV3; @@ -10382,10 +10169,6 @@ void smb_Init(osi_log_t *logp, int useV3, myTime.tm_sec = 0; smb_localZero = mktime(&myTime); -#ifndef USE_NUMERIC_TIME_CONV - /* Initialize kludge-GMT */ - smb_CalculateNowTZ(); -#endif /* USE_NUMERIC_TIME_CONV */ #ifdef AFS_FREELANCE_CLIENT /* Make sure the root.afs volume has the correct time */ cm_noteLocalMountPointChange(); @@ -10832,7 +10615,6 @@ void smb_Shutdown(void) } lock_ReleaseWrite(&smb_rctLock); smb_FreeNCB(ncbp); - TlsFree(smb_TlsRequestSlot); } /* Get the UNC \\\ prefix. */ diff --git a/src/WINNT/afsd/smb.h b/src/WINNT/afsd/smb.h index b080fcfd4..a2c3cc55c 100644 --- a/src/WINNT/afsd/smb.h +++ b/src/WINNT/afsd/smb.h @@ -544,14 +544,6 @@ extern void smb_Init(osi_log_t *logp, int useV3, , void *aMBfunc ); -extern void smb_LargeSearchTimeFromUnixTime(FILETIME *largeTimep, time_t unixTime); - -extern void smb_UnixTimeFromLargeSearchTime(time_t *unixTimep, FILETIME *largeTimep); - -extern void smb_SearchTimeFromUnixTime(afs_uint32 *searchTimep, time_t unixTime); - -extern void smb_UnixTimeFromSearchTime(time_t *unixTimep, afs_uint32 searchTime); - extern void smb_DosUTimeFromUnixTime(afs_uint32 *dosUTimep, time_t unixTime); extern void smb_UnixTimeFromDosUTime(time_t *unixTimep, afs_uint32 dosUTime); @@ -824,9 +816,6 @@ extern char *smb_GetSharename(void); extern DWORD smb_ServerExceptionFilter(void); -extern void smb_UpdateServerPriority(void); -extern void smb_SetRequestStartTime(void); -extern void smb_ResetServerPriority(void); extern void smb_RestartListeners(int); extern void smb_StopListeners(int); extern void smb_StopListener(NCB *ncbp, int lana, int wait); diff --git a/src/WINNT/afsd/smb3.c b/src/WINNT/afsd/smb3.c index 05c1a8910..edc27fce3 100644 --- a/src/WINNT/afsd/smb3.c +++ b/src/WINNT/afsd/smb3.c @@ -2746,7 +2746,7 @@ long smb_ReceiveTran2Open(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op) osi_assertx(dscp != NULL && scp == NULL, "null dsc || non-null sc"); openAction = 2; /* created file */ setAttr.mask = CM_ATTRMASK_CLIENTMODTIME; - smb_UnixTimeFromSearchTime(&setAttr.clientModTime, dosTime); + cm_UnixTimeFromSearchTime(&setAttr.clientModTime, dosTime); code = cm_Create(dscp, lastNamep, 0, &setAttr, &scp, userp, &req); if (code == 0) { @@ -2852,7 +2852,7 @@ long smb_ReceiveTran2Open(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *op) lock_ObtainRead(&scp->rw); if (extraInfo) { outp->parmsp[parmSlot++] = smb_Attributes(scp); - smb_SearchTimeFromUnixTime(&dosTime, scp->clientModTime); + cm_SearchTimeFromUnixTime(&dosTime, scp->clientModTime); outp->parmsp[parmSlot++] = (unsigned short)(dosTime & 0xffff); outp->parmsp[parmSlot++] = (unsigned short)((dosTime>>16) & 0xffff); outp->parmsp[parmSlot++] = (unsigned short) (scp->length.LowPart & 0xffff); @@ -3327,7 +3327,7 @@ long smb_ReceiveTran2QPathInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t goto done; } else if (infoLevel == SMB_INFO_STANDARD || infoLevel == SMB_INFO_QUERY_EA_SIZE) { - smb_SearchTimeFromUnixTime(&dosTime, scp->clientModTime); + cm_SearchTimeFromUnixTime(&dosTime, scp->clientModTime); qpi.u.QPstandardInfo.creationDateTime = dosTime; qpi.u.QPstandardInfo.lastAccessDateTime = dosTime; qpi.u.QPstandardInfo.lastWriteDateTime = dosTime; @@ -3338,7 +3338,7 @@ long smb_ReceiveTran2QPathInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t qpi.u.QPstandardInfo.eaSize = 0; } else if (infoLevel == SMB_QUERY_FILE_BASIC_INFO) { - smb_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime); + cm_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime); qpi.u.QPfileBasicInfo.creationTime = ft; qpi.u.QPfileBasicInfo.lastAccessTime = ft; qpi.u.QPfileBasicInfo.lastWriteTime = ft; @@ -3375,7 +3375,7 @@ long smb_ReceiveTran2QPathInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t qpi.u.QPfileEaInfo.eaSize = 0; } else if (infoLevel == SMB_QUERY_FILE_ALL_INFO) { - smb_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime); + cm_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime); qpi.u.QPfileAllInfo.creationTime = ft; qpi.u.QPfileAllInfo.lastAccessTime = ft; qpi.u.QPfileAllInfo.lastWriteTime = ft; @@ -3586,7 +3586,7 @@ long smb_ReceiveTran2SetPathInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet attr.length.HighPart = 0; if (spi->u.QPstandardInfo.lastWriteDateTime != 0) { - smb_UnixTimeFromSearchTime(&attr.clientModTime, spi->u.QPstandardInfo.lastWriteDateTime); + cm_UnixTimeFromSearchTime(&attr.clientModTime, spi->u.QPstandardInfo.lastWriteDateTime); attr.mask |= CM_ATTRMASK_CLIENTMODTIME; } @@ -3722,7 +3722,7 @@ long smb_ReceiveTran2QFileInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t * Marshall the output data. */ if (infoLevel == SMB_QUERY_FILE_BASIC_INFO) { - smb_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime); + cm_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime); qfi.u.QFbasicInfo.creationTime = ft; qfi.u.QFbasicInfo.lastAccessTime = ft; qfi.u.QFbasicInfo.lastWriteTime = ft; @@ -3897,7 +3897,7 @@ long smb_ReceiveTran2SetFileInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet if (LargeIntegerNotEqualToZero(*((LARGE_INTEGER *)&lastMod)) && lastMod.dwLowDateTime != -1 && lastMod.dwHighDateTime != -1) { attr.mask |= CM_ATTRMASK_CLIENTMODTIME; - smb_UnixTimeFromLargeSearchTime(&attr.clientModTime, &lastMod); + cm_UnixTimeFromLargeSearchTime(&attr.clientModTime, &lastMod); fidp->flags |= SMB_FID_MTIMESETDONE; } @@ -4492,7 +4492,7 @@ smb_ApplyV3DirListPatches(cm_scache_t *dscp, smb_dirListPatch_t **dirPatchespp, smb_V3FileAttrsLong * fa = (smb_V3FileAttrsLong *) patchp->dptr; /* get filetime */ - smb_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime); + cm_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime); fa->creationTime = ft; fa->lastAccessTime = ft; @@ -4527,7 +4527,7 @@ smb_ApplyV3DirListPatches(cm_scache_t *dscp, smb_dirListPatch_t **dirPatchespp, smb_V3FileAttrsShort * fa = (smb_V3FileAttrsShort *) patchp->dptr; /* get dos time */ - smb_SearchTimeFromUnixTime(&dosTime, scp->clientModTime); + cm_SearchTimeFromUnixTime(&dosTime, scp->clientModTime); fa->creationDateTime = MAKELONG(HIWORD(dosTime), LOWORD(dosTime)); fa->lastAccessDateTime = fa->creationDateTime; @@ -6579,7 +6579,7 @@ long smb_ReceiveV3GetAttributes(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t * * call provides the date first, not the time, as returned in the * searchTime variable. So we take the high-order bits first. */ - smb_SearchTimeFromUnixTime(&searchTime, scp->clientModTime); + cm_SearchTimeFromUnixTime(&searchTime, scp->clientModTime); smb_SetSMBParm(outp, 0, (searchTime >> 16) & 0xffff); /* ctime */ smb_SetSMBParm(outp, 1, searchTime & 0xffff); smb_SetSMBParm(outp, 2, (searchTime >> 16) & 0xffff); /* atime */ @@ -6660,7 +6660,7 @@ long smb_ReceiveV3SetAttributes(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t * searchTime = smb_GetSMBParm(inp, 5) | (smb_GetSMBParm(inp, 6) << 16); if (searchTime != 0) { - smb_UnixTimeFromSearchTime(&unixTime, searchTime); + cm_UnixTimeFromSearchTime(&unixTime, searchTime); if ( unixTime != -1 ) { attrs.mask = CM_ATTRMASK_CLIENTMODTIME; @@ -6669,7 +6669,7 @@ long smb_ReceiveV3SetAttributes(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t * osi_Log1(smb_logp, "SMB receive V3SetAttributes [fid=%ld]", fid); } else { - osi_Log1(smb_logp, "**smb_UnixTimeFromSearchTime failed searchTime=%ld", searchTime); + osi_Log1(smb_logp, "**cm_UnixTimeFromSearchTime failed searchTime=%ld", searchTime); } } else @@ -7853,7 +7853,7 @@ long smb_ReceiveNTCreateX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) smb_SetSMBParmByte(outp, parmSlot, 0); /* oplock */ smb_SetSMBParm(outp, parmSlot, fidp->fid); parmSlot++; smb_SetSMBParmLong(outp, parmSlot, openAction); parmSlot += 2; - smb_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime); + cm_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime); smb_SetSMBParmDouble(outp, parmSlot, (char *)&ft); parmSlot += 4; smb_SetSMBParmDouble(outp, parmSlot, (char *)&ft); parmSlot += 4; smb_SetSMBParmDouble(outp, parmSlot, (char *)&ft); parmSlot += 4; @@ -8565,7 +8565,7 @@ long smb_ReceiveNTTranCreate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *out *((USHORT *)outData) = fidp->fid; outData += 2; /* fid */ *((ULONG *)outData) = openAction; outData += 4; *((ULONG *)outData) = 0; outData += 4; /* EA error offset */ - smb_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime); + cm_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime); *((FILETIME *)outData) = ft; outData += 8; /* creation time */ *((FILETIME *)outData) = ft; outData += 8; /* last access time */ *((FILETIME *)outData) = ft; outData += 8; /* last write time */ @@ -8614,7 +8614,7 @@ long smb_ReceiveNTTranCreate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *out *((USHORT *)outData) = fidp->fid; outData += 2; /* fid */ *((ULONG *)outData) = openAction; outData += 4; *((ULONG *)outData) = 0; outData += 4; /* EA error offset */ - smb_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime); + cm_LargeSearchTimeFromUnixTime(&ft, scp->clientModTime); *((FILETIME *)outData) = ft; outData += 8; /* creation time */ *((FILETIME *)outData) = ft; outData += 8; /* last access time */ *((FILETIME *)outData) = ft; outData += 8; /* last write time */ diff --git a/src/util/errmap_nt.h b/src/util/errmap_nt.h index 4ffdc012a..92dafdfae 100644 --- a/src/util/errmap_nt.h +++ b/src/util/errmap_nt.h @@ -68,10 +68,12 @@ extern int nterr_nt2unix(long ntErr, int defaultErr); #define EDQUOT WSAEDQUOT #define ESTALE WSAESTALE #define EREMOTE WSAEREMOTE -#endif /* EWOULDBLOCK */ -/* New codes */ -#define AFS_NT_ERRNO_BASE WSABASEERR + 1000 +/* + * New codes + * Highest known value is WSA_QOS_RESERVED_PETYPE (WSABASEERR + 1031) + */ +#define AFS_NT_ERRNO_BASE WSABASEERR + 1100 #define EOVERFLOW (AFS_NT_ERRNO_BASE + 0) #define ENOMSG (AFS_NT_ERRNO_BASE + 1) -- 2.39.5