Fix for setatr in clifile.c

derrell at samba.org derrell at samba.org
Tue Apr 26 18:59:46 GMT 2005


Satwik, what Windows version were you testing against when you found that you
needed to use a Unix timestamp on the wire?

Derrell


Jeremy Allison <jra at samba.org> writes:

> On Tue, Apr 26, 2005 at 02:47:03PM -0400, derrell at samba.org wrote:
>> "Satwik Hebbar" <satwikh at calsoftinc.com> writes:
>> 
>> > I was using the cli_setatr function of the smbclient for setting file  
>> > attributes on a file and the cli_setattrE function for setting timestats  
>> > on the file. Both the functions were converting times to the dos format  
>> > before putting them onto the wire. While this works fine for setattrE,  
>> > setatr, which accepts a time_t value for the last write time for the file,  
>> > sets the incorrect last write value on the file. This is because setatr  
>> > expects times in the unix format and when I made that change to the code,  
>> > it started setting the proper last write time value.
>> 
>> The CIFS spec (draft-leach-cifs-v1-spec-02.html) agrees with the above
>> imperically-derived bug find.  It appears, though, that the Samba server
>> expects a DOS-encoded timestamp, not a Unix timestamp.  reply.c:reply_setatr()
>> calls make_unix_date3() with the supplied timestamp before setting the file's
>> attributes with utime().
>> 
>> Is it possible that this code path has not been exercised in the Samba server,
>> such that no one ever noticed that the timestamps are set incorrectly when
>> using SMB_COM_SET_INFORMATION (aka SMBsetatr)?  Or are different styles of
>> timestamps passed at different times, and some more information is required to
>> ascertain whether to do the format conversion?
>
> Test this against a W2K3 server. Don't change anything until then. It's unlikely
> such an old SMB actually uses a UNIX time_t no matter what the spec says.
>
> Jeremy.


More information about the samba-technical mailing list