Fix changing of attributes via setattr. Samba4 test fixes.
authorJeremy Allison <jra@samba.org>
Thu, 14 Aug 2003 23:15:02 +0000 (23:15 +0000)
committerJeremy Allison <jra@samba.org>
Thu, 14 Aug 2003 23:15:02 +0000 (23:15 +0000)
Jeremy.
(This used to be commit 97e1d5c9573513c9c9be9a709341bda54fbe44be)

source3/smbd/reply.c
source3/smbd/trans2.c

index 8df118ab1605e909364be408124769ce0e50d980..35d07d5bf7d00c71784e7084552f649e0e37339f 100644 (file)
@@ -544,13 +544,18 @@ int reply_setatr(connection_struct *conn, char *inbuf,char *outbuf, int dum_size
        mode = SVAL(inbuf,smb_vwv0);
        mtime = make_unix_date3(inbuf+smb_vwv1);
   
-       if (VALID_STAT_OF_DIR(sbuf))
-               mode |= aDIR;
-       else
-               mode &= ~aDIR;
+       if (mode != FILE_ATTRIBUTE_NORMAL) {
+               if (VALID_STAT_OF_DIR(sbuf))
+                       mode |= aDIR;
+               else
+                       mode &= ~aDIR;
+
+               if (check_name(fname,conn))
+                       ok =  (file_chmod(conn,fname,mode,NULL) == 0);
+       } else {
+               ok = True;
+       }
 
-       if (check_name(fname,conn))
-               ok =  (file_chmod(conn,fname,mode,NULL) == 0);
        if (ok)
                ok = set_filetime(conn,fname,mtime);
   
index 8adac1930f408b61d87aee0a7ad8b4a085e7ff1e..efce768177836fc54ad7c71f0f8880c06ff57cd1 100644 (file)
@@ -1871,6 +1871,9 @@ static int call_trans2qfilepathinfo(connection_struct *conn,
                base_name = p+1;
 
        mode = dos_mode(conn,fname,&sbuf);
+       if (!mode)
+               mode = FILE_ATTRIBUTE_NORMAL;
+
        fullpathname = fname;
        file_size = get_file_size(sbuf);
        allocation_size = get_allocation_size(fsp,&sbuf);
@@ -2915,10 +2918,15 @@ size = %.0f, uid = %u, gid = %u, raw perms = 0%o\n",
        DEBUG(6,("modtime: %s ", ctime(&tvs.modtime)));
        DEBUG(6,("size: %.0f ", (double)size));
 
-       if (S_ISDIR(sbuf.st_mode))
-               dosmode |= aDIR;
-       else
-               dosmode &= ~aDIR;
+       if (dosmode == FILE_ATTRIBUTE_NORMAL)
+               dosmode = 0;
+
+       if (dosmode) {
+               if (S_ISDIR(sbuf.st_mode))
+                       dosmode |= aDIR;
+               else
+                       dosmode &= ~aDIR;
+       }
 
        DEBUG(6,("dosmode: %x\n"  , dosmode));