Re: [PATCH v3 08/15] cifscreds: make username parameter optional

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 11 Jan 2012 12:22:30 -0600
Shirish Pargaonkar <shirishpargaonkar@xxxxxxxxx> wrote:

> On Fri, Jan 6, 2012 at 12:14 PM, Jeff Layton <jlayton@xxxxxxxxx> wrote:
> > ...and use getopt_long to get it. If someone doesn't specify the username,
> > use getusername() to get it.
> >
> > Signed-off-by: Jeff Layton <jlayton@xxxxxxxxx>
> > ---
> >  cifscreds.c |   39 ++++++++++++++++++++++++++++-----------
> >  1 files changed, 28 insertions(+), 11 deletions(-)
> >
> > diff --git a/cifscreds.c b/cifscreds.c
> > index 79ab426..f45497a 100644
> > --- a/cifscreds.c
> > +++ b/cifscreds.c
> > @@ -27,8 +27,10 @@
> >  #include <string.h>
> >  #include <ctype.h>
> >  #include <keyutils.h>
> > +#include <getopt.h>
> >  #include "mount.h"
> >  #include "resolve_host.h"
> > +#include "util.h"
> >
> >  #define THIS_PROGRAM_NAME "cifscreds"
> >
> > @@ -49,8 +51,8 @@
> >  #define DEST_KEYRING KEY_SPEC_USER_KEYRING
> >
> >  struct cmdarg {
> > -       char    *host;
> > -       char    *user;
> > +       char            *host;
> > +       char            *user;
> >  };
> >
> >  struct command {
> > @@ -67,13 +69,18 @@ static int cifscreds_update(struct cmdarg *arg);
> >  const char *thisprogram;
> >
> >  struct command commands[] = {
> > -       { cifscreds_add,        "add",          "<host> <user>" },
> > -       { cifscreds_clear,      "clear",        "<host> <user>" },
> > +       { cifscreds_add,        "add",          "[-u username] <host>" },
> > +       { cifscreds_clear,      "clear",        "[-u username] <host>" },
> >        { cifscreds_clearall,   "clearall",     "" },
> > -       { cifscreds_update,     "update",       "<host> <user>" },
> > +       { cifscreds_update,     "update",       "[-u username] <host>" },
> >        { NULL, "", NULL }
> >  };
> >
> > +struct option longopts[] = {
> > +       {"username", 1, NULL, 'u'},
> > +       {NULL, 0, NULL, 0}
> > +};
> > +
> >  /* display usage information */
> >  static int
> >  usage(void)
> > @@ -499,12 +506,22 @@ int main(int argc, char **argv)
> >        if (argc == 1)
> >                return usage();
> >
> > +       while((n = getopt_long(argc, argv, "u:", longopts, NULL)) != -1) {
> > +               switch (n) {
> > +               case 'u':
> > +                       arg.user = optarg;
> > +                       break;
> > +               default:
> > +                       return usage();
> > +               }
> > +       }
> > +
> >        /* find the best fit command */
> >        best = NULL;
> > -       n = strnlen(argv[1], MAX_COMMAND_SIZE);
> > +       n = strnlen(argv[optind], MAX_COMMAND_SIZE);
> >
> >        for (cmd = commands; cmd->action; cmd++) {
> > -               if (memcmp(cmd->name, argv[1], n) != 0)
> > +               if (memcmp(cmd->name, argv[optind], n) != 0)
> >                        continue;
> >
> >                if (cmd->name[n] == 0) {
> > @@ -527,12 +544,12 @@ int main(int argc, char **argv)
> >                return EXIT_FAILURE;
> >        }
> >
> > -       /* first argument should be host */
> > +       /* second argument should be host */
> >        if (argc >= 3)
> > -               arg.host = argv[2];
> > +               arg.host = argv[optind + 1];
> >
> > -       if (argc >= 4)
> > -               arg.user = argv[3];
> > +       if (arg.user == NULL)
> > +               arg.user = getusername(getuid());
> >
> >        return best->action(&arg);
> >  }
> > --
> > 1.7.7.4
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
> > the body of a message to majordomo@xxxxxxxxxxxxxxx
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> Just a thought, can user specify only one hostname and would hostname
> be always the last argument for cifscreds_* commands?
> 
> I was thinking whtether an user might want to manipulate keys for
> multiple servers in one command!

Not a bad idea at all.

I don't see anything that would preclude that. I suppose we could take
multiple host or domain arguments, and set keys for all of them. I'd
probably not do that in this patchset since I'm already making a lot of
changes here, but it wouldn't be too hard to do.

-- 
Jeff Layton <jlayton@xxxxxxxxx>
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux