2009-08-27 19:34:41

by Chuck Lever

[permalink] [raw]
Subject: 2008 mountd clean-up patch

I'm looking at a 2008 nfs-utils clean up done in commit 7a817c45. It
has this hunk in it:

@@ -111,7 +111,7 @@ void auth_unix_ip(FILE *f)
else if (client)
qword_print(f, *client?client:"DEFAULT");
qword_eol(f);
- xlog(D_CALL, "auth_unix_ip: client %p '%s'", client, *client?
client: "DEFAULT");
+ xlog(D_CALL, "auth_unix_ip: client %p '%s'", client, client?
client: "DEFAULT");

if (client) free(client);
free(he);

You changed the '*client ? client : "DEFAULT"' expression in the
xlog() call, but not in the qword_print() call right above it. Which
of these is correct, and why do they need to be different from each
other?

Seems to me _both_ should be 'client ? client : "DEFAULT"' (ie.
without the dereference).

--
Chuck Lever
chuck[dot]lever[at]oracle[dot]com





2009-08-27 22:01:29

by Frank Filz

[permalink] [raw]
Subject: Re: 2008 mountd clean-up patch

On Thu, 2009-08-27 at 15:34 -0400, Chuck Lever wrote:
> I'm looking at a 2008 nfs-utils clean up done in commit 7a817c45. It
> has this hunk in it:
>
> @@ -111,7 +111,7 @@ void auth_unix_ip(FILE *f)
> else if (client)
> qword_print(f, *client?client:"DEFAULT");
> qword_eol(f);
> - xlog(D_CALL, "auth_unix_ip: client %p '%s'", client, *client?
> client: "DEFAULT");
> + xlog(D_CALL, "auth_unix_ip: client %p '%s'", client, client?
> client: "DEFAULT");
>
> if (client) free(client);
> free(he);
>
> You changed the '*client ? client : "DEFAULT"' expression in the
> xlog() call, but not in the qword_print() call right above it. Which
> of these is correct, and why do they need to be different from each
> other?
>
> Seems to me _both_ should be 'client ? client : "DEFAULT"' (ie.
> without the dereference).

There would be no point to not dereferencing client, it has already been
checked for NULL by "else if (client)". What it is doing is if the
client string is empty, it is printing "DEFAULT", and if the client
string is NULL, then it prints nothing.

Perhaps the xlog should be:


if (client)
xlog(D_CALL, "auth_unix_ip: client %p '%s', client, *client?client: "DEFAULT");
else
xlog(D_CALL, "auth_unix_ip: client NULL");

Frank



2009-08-28 14:13:52

by Chuck Lever

[permalink] [raw]
Subject: Re: 2008 mountd clean-up patch

On Aug 27, 2009, at 6:01 PM, Frank Filz wrote:
> On Thu, 2009-08-27 at 15:34 -0400, Chuck Lever wrote:
>> I'm looking at a 2008 nfs-utils clean up done in commit 7a817c45. It
>> has this hunk in it:
>>
>> @@ -111,7 +111,7 @@ void auth_unix_ip(FILE *f)
>> else if (client)
>> qword_print(f, *client?client:"DEFAULT");
>> qword_eol(f);
>> - xlog(D_CALL, "auth_unix_ip: client %p '%s'", client, *client?
>> client: "DEFAULT");
>> + xlog(D_CALL, "auth_unix_ip: client %p '%s'", client, client?
>> client: "DEFAULT");
>>
>> if (client) free(client);
>> free(he);
>>
>> You changed the '*client ? client : "DEFAULT"' expression in the
>> xlog() call, but not in the qword_print() call right above it. Which
>> of these is correct, and why do they need to be different from each
>> other?
>>
>> Seems to me _both_ should be 'client ? client : "DEFAULT"' (ie.
>> without the dereference).
>
> There would be no point to not dereferencing client, it has already
> been
> checked for NULL by "else if (client)". What it is doing is if the
> client string is empty, it is printing "DEFAULT", and if the client
> string is NULL, then it prints nothing.
>
> Perhaps the xlog should be:
>
>
> if (client)
> xlog(D_CALL, "auth_unix_ip: client %p '%s', client, *client?
> client: "DEFAULT");
> else
> xlog(D_CALL, "auth_unix_ip: client NULL");

To confirm, then, the fix in 7a817c45 is bogus?

--
Chuck Lever
chuck[dot]lever[at]oracle[dot]com




2009-08-28 15:06:05

by Frank Filz

[permalink] [raw]
Subject: Re: 2008 mountd clean-up patch

On Fri, 2009-08-28 at 09:43 -0400, Chuck Lever wrote:
> On Aug 27, 2009, at 6:01 PM, Frank Filz wrote:
> > On Thu, 2009-08-27 at 15:34 -0400, Chuck Lever wrote:
> >> I'm looking at a 2008 nfs-utils clean up done in commit 7a817c45. It
> >> has this hunk in it:
> >>
> >> @@ -111,7 +111,7 @@ void auth_unix_ip(FILE *f)
> >> else if (client)
> >> qword_print(f, *client?client:"DEFAULT");
> >> qword_eol(f);
> >> - xlog(D_CALL, "auth_unix_ip: client %p '%s'", client, *client?
> >> client: "DEFAULT");
> >> + xlog(D_CALL, "auth_unix_ip: client %p '%s'", client, client?
> >> client: "DEFAULT");
> >>
> >> if (client) free(client);
> >> free(he);
> >>
> >> You changed the '*client ? client : "DEFAULT"' expression in the
> >> xlog() call, but not in the qword_print() call right above it. Which
> >> of these is correct, and why do they need to be different from each
> >> other?
> >>
> >> Seems to me _both_ should be 'client ? client : "DEFAULT"' (ie.
> >> without the dereference).
> >
> > There would be no point to not dereferencing client, it has already
> > been
> > checked for NULL by "else if (client)". What it is doing is if the
> > client string is empty, it is printing "DEFAULT", and if the client
> > string is NULL, then it prints nothing.
> >
> > Perhaps the xlog should be:
> >
> >
> > if (client)
> > xlog(D_CALL, "auth_unix_ip: client %p '%s', client, *client?
> > client: "DEFAULT");
> > else
> > xlog(D_CALL, "auth_unix_ip: client NULL");
>
> To confirm, then, the fix in 7a817c45 is bogus?

>From what I can see, yes.

Frank