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