tags 309003 patch thanks Quoting Michael Lueck ([EMAIL PROTECTED]): > I have downloaded and installed: > > samba-common_3.0.14a-2_i386.deb > samba_3.0.14a-2_i386.deb > > The problem is resolved in this version. That is as much as I have tested at > this time. I will be doing some major file transfers against the new code and > report after that. > > At this time we do not use the other .deb's in the Samba project.
Great. For Steve and Eloy, here's the patch I used.
--- samba-3.0.14a.orig/source/include/smb_macros.h 2005-04-13 23:14:26.000000000 -0700 +++ samba-3.0.14/source/include/smb_macros.h 2005-05-01 02:21:08.000000000 -0700 @@ -225,16 +225,10 @@ split_at_last_component(full_keyname, key_name, '\\', subkey_name) /**************************************************************************** - Used by dptr_zero. -****************************************************************************/ - -#define DPTR_MASK ((uint32)(((uint32)1)<<31)) - -/**************************************************************************** Return True if the offset is at zero. ****************************************************************************/ -#define dptr_zero(buf) ((IVAL(buf,1)&~DPTR_MASK) == 0) +#define dptr_zero(buf) (IVAL(buf,1) == 0) /******************************************************************* copy an IP address from one buffer to another --- samba-3.0.14a.orig/source/smbd/dir.c 2005-04-13 23:14:20.000000000 -0700 +++ samba-3.0.14a/source/smbd/dir.c 2005-05-01 02:21:08.000000000 -0700 @@ -622,11 +622,11 @@ DEBUG(1,("filling null dirptr %d\n",key)); return(False); } - offset = TellDir(dptr->dir_hnd); + offset = (uint32)TellDir(dptr->dir_hnd); DEBUG(6,("fill on key %u dirptr 0x%lx now at %d\n",key, (long)dptr->dir_hnd,(int)offset)); buf[0] = key; - SIVAL(buf,1,offset | DPTR_MASK); + SIVAL(buf,1,offset); return(True); } @@ -639,16 +639,22 @@ unsigned int key = *(unsigned char *)buf; struct dptr_struct *dptr = dptr_get(key, False); uint32 offset; + long seekoff; if (!dptr) { DEBUG(3,("fetched null dirptr %d\n",key)); return(NULL); } *num = key; - offset = IVAL(buf,1)&~DPTR_MASK; - SeekDir(dptr->dir_hnd,(long)offset); + offset = IVAL(buf,1); + if (offset == (uint32)-1) { + seekoff = -1; + } else { + seekoff = (long)offset; + } + SeekDir(dptr->dir_hnd,seekoff); DEBUG(3,("fetching dirptr %d for path %s at offset %d\n", - key,dptr_path(key),offset)); + key,dptr_path(key),(int)seekoff)); return(dptr); }