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

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

 



On Wed, Jan 11, 2012 at 12:48 PM, Jeff Layton <jlayton@xxxxxxxxx> wrote:
> 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

yes, something like a comma separated list

> 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>

fair enough
--
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