[stgt] [PATCH] check for valid parameters when passing tgtadm commands
FUJITA Tomonori
fujita.tomonori at lab.ntt.co.jp
Fri Oct 10 14:24:22 CEST 2008
On Fri, 10 Oct 2008 11:38:39 +0200
"Eli Dorfman" <dorfman.eli at gmail.com> wrote:
> On Wed, Oct 8, 2008 at 9:02 AM, FUJITA Tomonori
> <fujita.tomonori at lab.ntt.co.jp> wrote:
> > On Wed, 08 Oct 2008 08:45:32 +0200
> > Doron Shoham <dorons at voltaire.com> wrote:
> >
> >> FUJITA Tomonori wrote:
> >> > On Tue, 07 Oct 2008 18:01:31 +0200
> >> > Doron Shoham <dorons at Voltaire.COM> wrote:
> >> >
> >> >> check for valid parameters when passing tgtadm commands
> >> >>
> >> >> Signed-off-by: Doron Shoham <dorons at voltaire.com>
> >> >> ---
> >> >> usr/tgtadm.c | 65 +++++++++++++++++++++++++++++++++++++++++-----------------
> >> >> 1 files changed, 46 insertions(+), 19 deletions(-)
> >> >>
> >> >> diff --git a/usr/tgtadm.c b/usr/tgtadm.c
> >> >> index 9e90b40..21bb245 100644
> >> >> --- a/usr/tgtadm.c
> >> >> +++ b/usr/tgtadm.c
> >> >> @@ -484,35 +484,38 @@ int main(int argc, char **argv)
> >> >> /* exit(EINVAL); */
> >> >> }
> >> >>
> >> >> - if ((name || value) && op != OP_UPDATE) {
> >> >> - eprintf("only 'update' operation takes"
> >> >> - " 'name' and 'value' options\n");
> >> >> - exit(EINVAL);
> >> >> - }
> >> >
> >> > Hm, I think that this is a valid checking. Why did you remove it?
> >>
> >> My idea was to check that every option
> >> receives its own valid parameters.
> >
> > But if you do, the code would have tons of duplications:
> >
> >
> > case OP_SHOW:
> > if (name || value)
> > eprintf("only 'update' operation takes"
> > " 'name' and 'value' options\n");
> > exit(EINVAL);
> > break;
> > case OP_DELETE:
> > if (name || value)
> > eprintf("only 'update' operation takes"
> > " 'name' and 'value' options\n");
> > exit(EINVAL);
> > break;
> > case OP_BIND:
> > if (name || value)
> > eprintf("only 'update' operation takes"
> > " 'name' and 'value' options\n");
> > exit(EINVAL);
> > break;
> > case OP_UNBIND:
> > if (name || value)
> > eprintf("only 'update' operation takes"
> > " 'name' and 'value' options\n");
> > exit(EINVAL);
> > break;
> > case OP_UPDATE:
> >
> >
> > Or
> >
> > void check_name_value(void)
> > {
> > if (name || value)
> > eprintf("only 'update' operation takes"
> > " 'name' and 'value' options\n");
> > exit(EINVAL);
> > }
> >
> > case OP_SHOW:
> > check_name_value();
> > break;
> > case OP_BIND:
> > check_name_value();
> > break;
> >
> >
> > Neither looks good.
>
> The second option looks much better,
But if we go with this way, the code would be like:
case OP_DELETE:
check_name_value();
check_is_initiator_address_null();
check_is_backing_store_null();
...
break;
case OP_SHOW:
check_name_value();
check_is_initiator_address_null();
check_is_backing_store_null();
...
break;
> but in general i agree with
> doron's approach that we should check values per option unless there
> are common values (e.g. tid) that can be checked before the switch for
> all options.
> The current code of tgtadm does not handle properly any wrong input
> from the user and simply returns sigfault.
I know, as I said in the previous mail, surely we need to fix tgtadm.
--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
More information about the stgt
mailing list