1 diff -Nur samba-2.2.4.orig/source/include/trans2.h samba-2.2.4/source/include/trans2.h
2 --- samba-2.2.4.orig/source/include/trans2.h Sun Feb 3 01:46:40 2002
3 +++ samba-2.2.4/source/include/trans2.h Thu Jun 13 15:54:53 2002
5 #define SMB_UID_NO_CHANGE 0xFFFFFFFF
6 #define SMB_GID_NO_CHANGE 0xFFFFFFFF
8 +#define SMB_SIZE_NO_CHANGE 0xFFFFFFFFFFFFFFFF
9 +#define SMB_SIZE_NO_CHANGE_LO 0xFFFFFFFF
10 +#define SMB_SIZE_NO_CHANGE_HI 0xFFFFFFFF
12 +#define SMB_TIME_NO_CHANGE 0xFFFFFFFFFFFFFFFF
13 +#define SMB_TIME_NO_CHANGE_LO 0xFFFFFFFF
14 +#define SMB_TIME_NO_CHANGE_HI 0xFFFFFFFF
19 0 LARGE_INTEGER EndOfFile File size
20 diff -Nur samba-2.2.4.orig/source/smbd/trans2.c samba-2.2.4/source/smbd/trans2.c
21 --- samba-2.2.4.orig/source/smbd/trans2.c Fri May 3 03:03:49 2002
22 +++ samba-2.2.4/source/smbd/trans2.c Thu Jun 13 15:54:53 2002
26 /****************************************************************************
27 +checks for SMB_TIME_NO_CHANGE and if not found
28 +calls interpret_long_date
29 +****************************************************************************/
30 +time_t interpret_long_unix_date(char *p)
32 + DEBUG(1,("interpret_long_unix_date\n"));
33 + if(IVAL(p,0) == SMB_TIME_NO_CHANGE_LO &&
34 + IVAL(p,4) == SMB_TIME_NO_CHANGE_HI) {
37 + return interpret_long_date(p);
41 +/****************************************************************************
42 Get a level dependent lanman2 dir entry.
43 ****************************************************************************/
45 @@ -2575,16 +2590,19 @@
47 return(ERROR_DOS(ERRDOS,ERRinvalidparam));
49 - size=IVAL(pdata,0); /* first 8 Bytes are size */
50 + if(IVAL(pdata, 0) != SMB_SIZE_NO_CHANGE_LO &&
51 + IVAL(pdata, 4) != SMB_SIZE_NO_CHANGE_HI) {
52 + size=IVAL(pdata,0); /* first 8 Bytes are size */
53 #ifdef LARGE_SMB_OFF_T
54 - size |= (((SMB_OFF_T)IVAL(pdata,4)) << 32);
55 + size |= (((SMB_OFF_T)IVAL(pdata,4)) << 32);
56 #else /* LARGE_SMB_OFF_T */
57 - if (IVAL(pdata,4) != 0) /* more than 32 bits? */
58 - return ERROR_DOS(ERRDOS,ERRunknownlevel);
59 + if (IVAL(pdata,4) != 0) /* more than 32 bits? */
60 + return ERROR_DOS(ERRDOS,ERRunknownlevel);
61 #endif /* LARGE_SMB_OFF_T */
63 pdata+=24; /* ctime & st_blocks are not changed */
64 - tvs.actime = interpret_long_date(pdata); /* access_time */
65 - tvs.modtime = interpret_long_date(pdata+8); /* modification_time */
66 + tvs.actime = interpret_long_unix_date(pdata); /* access_time */
67 + tvs.modtime = interpret_long_unix_date(pdata+8); /* modification_time */
69 set_owner = (uid_t)IVAL(pdata,0);