2.0.7: inherit permissions = yes breaks setting read-only on files
Robert Dahlem
Robert.Dahlem at gmx.net
Tue Aug 22 15:45:13 GMT 2000
Michael,
On Tue, 22 Aug 2000 19:04:16 +0400, Michael Tokarev wrote:
>> Oops. I thougt that the original patch tried to handle the
>> situation with some (broken?) UNIXes where mkdir() in fact creates
>> the directory, fails to set all the wanted bits and reports the
>> later fact with a return code != 0
>>
>> How about handling that situation with something like the
>> following? It leaves the return code from mkdir() intact for every
>> but that special case (dir created but bits missing AND cannot be
>> set afterwards).
>
>int dos_mkdir(char *dname,mode_t mode)
>{
> int ret;
> ret = mkdir(dos_to_unix(dname,False),mode);
>#ifdef HAVE_BROKEN_MKDIR
> if (!ret)
> ret=dos_chmod(dname,mode);
>#endif
> return ret;
>}
>
>where HAVE_BROKEN_MKDIR should be set by autoconf
>_only_when_mkdir_is_broken_. That's all.
I agree on the HAVE_BROKEN_MKDIR mimic but I do not agree on whats
between #ifdef and #endif: In the case of mkdir() in a directory with
SGID bit set the simple dos_chmod() would destroy SGID on the newly
created directory (besides "inherit permissions = yes" beeing totally
broken in this case). One have to take care not to reset any bits
automagically set by the operating system.
A mix from both proposals could be:
int dos_mkdir(char *dname,mode_t mode)
{
int ret;
SMB_STRUCT_STAT sbuf;
ret=mkdir(dos_to_unix(dname,False),mode);
#ifdef HAVE_BROKEN_MKDIR
if(!ret && !dos_stat(dname,&sbuf) && mode & ~sbuf.st_mode)
dos_chmod(dname,sbuf.st_mode | mode & ~sbuf.st_mode);
#endif
return ret;
}
>Note that anyway, even this variant should be corrected further.
>[...]
>Basically, Samba Team almost agreed that samba works on unix, and
>it should follow it's semantics and it should not be an operating
>system itself, just a _service_ that works on unix (well, mostly
>on unix).
Signed. :-)
Regards,
Robert
---------------------------------------------------------------
Robert.Dahlem at gmx.net Fax +49-69-432647
---------------------------------------------------------------
More information about the samba-technical
mailing list