mirror of
https://github.com/samba-team/samba.git
synced 2024-12-22 13:34:15 +03:00
- use issafe()
- map the archive bit in a more robust manner. We now set it when we first write to the file after opening it.
This commit is contained in:
parent
4419093d33
commit
d20627b378
@ -257,7 +257,7 @@ int dos_chmod(int cnum,char *fname,int dosmode,struct stat *st)
|
|||||||
unixmode &= ~(S_IWUSR|S_IWGRP|S_IWOTH);
|
unixmode &= ~(S_IWUSR|S_IWGRP|S_IWOTH);
|
||||||
unixmode |= tmp;
|
unixmode |= tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
return(chmod(fname,unixmode));
|
return(chmod(fname,unixmode));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -410,8 +410,12 @@ BOOL unix_convert(char *name,int cnum)
|
|||||||
{
|
{
|
||||||
if ((! *name) || strchr(name,'/') || !is_8_3(name))
|
if ((! *name) || strchr(name,'/') || !is_8_3(name))
|
||||||
{
|
{
|
||||||
|
char *s;
|
||||||
fstring name2;
|
fstring name2;
|
||||||
sprintf(name2,"%.6s.XXXXXX",remote_machine);
|
sprintf(name2,"%.6s.XXXXXX",remote_machine);
|
||||||
|
/* sanitise the name */
|
||||||
|
for (s=name2 ; *s ; s++)
|
||||||
|
if (!issafe(*s)) *s = '_';
|
||||||
strcpy(name,(char *)mktemp(name2));
|
strcpy(name,(char *)mktemp(name2));
|
||||||
}
|
}
|
||||||
return(True);
|
return(True);
|
||||||
@ -1227,16 +1231,6 @@ void close_file(int fnum)
|
|||||||
if (lp_share_modes(SNUM(cnum)))
|
if (lp_share_modes(SNUM(cnum)))
|
||||||
del_share_mode(fnum);
|
del_share_mode(fnum);
|
||||||
|
|
||||||
if (Files[fnum].modified) {
|
|
||||||
struct stat st;
|
|
||||||
if (fstat(Files[fnum].fd,&st) == 0) {
|
|
||||||
int dosmode = dos_mode(cnum,Files[fnum].name,&st);
|
|
||||||
if (!IS_DOS_ARCHIVE(dosmode)) {
|
|
||||||
dos_chmod(cnum,Files[fnum].name,dosmode | aARCH,&st);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
close(Files[fnum].fd);
|
close(Files[fnum].fd);
|
||||||
|
|
||||||
/* NT uses smbclose to start a print - weird */
|
/* NT uses smbclose to start a print - weird */
|
||||||
@ -1609,7 +1603,16 @@ int write_file(int fnum,char *data,int n)
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
Files[fnum].modified = True;
|
if (!Files[fnum].modified) {
|
||||||
|
struct stat st;
|
||||||
|
Files[fnum].modified = True;
|
||||||
|
if (fstat(Files[fnum].fd,&st) == 0) {
|
||||||
|
int dosmode = dos_mode(Files[fnum].cnum,Files[fnum].name,&st);
|
||||||
|
if (MAP_ARCHIVE(Files[fnum].cnum) && !IS_DOS_ARCHIVE(dosmode)) {
|
||||||
|
dos_chmod(Files[fnum].cnum,Files[fnum].name,dosmode | aARCH,&st);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return(write_data(Files[fnum].fd,data,n));
|
return(write_data(Files[fnum].fd,data,n));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user