case sensitive = yes and zfs casesensitivity = insensitive
Richard Sharpe
realrichardsharpe at gmail.com
Tue Jun 23 08:15:33 MDT 2015
On Mon, Jun 22, 2015 at 9:39 PM, Richard Sharpe
<realrichardsharpe at gmail.com> wrote:
>
> On Mon, Jun 22, 2015 at 12:12 PM, Richard Sharpe <realrichardsharpe at gmail.com> wrote:
>>
>> On Mon, Jun 22, 2015 at 10:51 AM, Jeremy Allison <jra at samba.org> wrote:
>>>
>>> On Fri, Jun 19, 2015 at 02:26:21PM -0700, Richard Sharpe wrote:
>>> > Hi,
>>> >
>>> > We were testing with this option in Samba master with ZFS and it was not
>>> > working, and it seems to revolve around the need for a change like this:
>>> >
>>> > --- a/source3/smbd/filename.c
>>> > +++ b/source3/smbd/filename.c
>>> > @@ -472,7 +472,9 @@ NTSTATUS unix_convert(TALLOC_CTX *ctx,
>>> > * won't help.
>>> > */
>>> >
>>> > - if ((conn->case_sensitive || !(conn->fs_capabilities &
>>> > + if ((lp_case_sensitive(SNUM(conn))
>>> > + || conn->case_sensitive
>>> > + || !(conn->fs_capabilities &
>>> > FILE_CASE_SENSITIVE_SEARCH)) &&
>>> > !mangle_is_mangled(smb_fname->base_name,
>>> > conn->p
>>> >
>>> > Did someone break this functionality at some time?
>>>
>>> Maybe. That change shouldn't be needed. Inside set_current_service()
>>> we have:
>>>
>>> switch (lp_case_sensitive(snum)) {
>>> case Auto:
>>> {
>>> /* We need this uglyness due to DOS/Win9x clients that lie about case inse
>>> enum remote_arch_types ra_type = get_remote_arch();
>>> if ((ra_type != RA_SAMBA) && (ra_type != RA_CIFSFS)) {
>>> /* Client can't support per-packet case sensitive pathnames. */
>>> conn->case_sensitive = False;
>>> } else {
>>> conn->case_sensitive = !(flags & FLAG_CASELESS_PATHNAMES);
>>> }
>>> }
>>> break;
>>> case True:
>>> conn->case_sensitive = True;
>>> break;
>>> default:
>>> conn->case_sensitive = False;
>>> break;
>>> }
>>>
>>> which means when "case sensitive = true" is set then
>>> conn->case_sensitive should always be set to true.
>>>
>>> Can you work with me to debug this ? I don't know
>>> exactly what you're seeing here.
>>
>>
>> I notice that there are two places where this should have been set, as it
> is also done in make_connection_snum and there does not appear to be
> anywhere where it is unset. We are rechecking whether or not this is needed.
>
> OK, we have figured it out. The problem was in the GetDFSReferral
> pathway where we create a new connection object because the request
> comes in on IPC$ and were not setting the case_sensitive flag ...
The problem appears to be that create_conn_struct_as_root is not
setting conn->case_sensitive. Something like this seems to be needed:
/* Case options for the share. */
if (lp_case_sensitive(snum) == Auto) {
/* We will be setting this per packet. Set to be case
* insensitive for now. */
conn->case_sensitive = False;
} else {
conn->case_sensitive = (bool)lp_case_sensitive(snum);
}
--
Regards,
Richard Sharpe
(何以解憂?唯有杜康。--曹操)
More information about the samba-technical
mailing list