- for (;;) {
- /*
- * We disable arg permutation for GNU getopt().
- * Some trickiness is required to allow environment variables
- * to be interspersed with command line options.
- */
- if ((ch = getopt(argc, argv, "+Aa:bC:c:Eeg:HhiKkLlnPp:r:Sst:U:u:Vv")) != -1) {
- switch (ch) {
- case 'A':
- SET(tgetpass_flags, TGP_ASKPASS);
- break;
-#ifdef HAVE_BSD_AUTH_H
- case 'a':
- login_style = optarg;
- break;
-#endif
- case 'b':
- SET(flags, MODE_BACKGROUND);
- break;
- case 'C':
- if ((user_closefrom = atoi(optarg)) < 3) {
- warningx("the argument to -C must be at least 3");
- usage(1);
- }
- break;
-#ifdef HAVE_LOGIN_CAP_H
- case 'c':
- login_class = optarg;
- def_use_loginclass = TRUE;
- break;
-#endif
- case 'E':
- SET(flags, MODE_PRESERVE_ENV);
- break;
- case 'e':
- if (mode && mode != MODE_EDIT)
- usage_excl(1);
- mode = MODE_EDIT;
- break;
- case 'g':
- runas_group = optarg;
- break;
- case 'H':
- SET(flags, MODE_RESET_HOME);
- break;
- case 'h':
- if (mode && mode != MODE_HELP)
- usage_excl(1);
- mode = MODE_HELP;
- break;
- case 'i':
- SET(flags, MODE_LOGIN_SHELL);
- def_env_reset = TRUE;
- break;
- case 'k':
- if (mode && mode != MODE_INVALIDATE)
- usage_excl(1);
- mode = MODE_INVALIDATE;
- break;
- case 'K':
- if (mode && mode != MODE_KILL)
- usage_excl(1);
- mode = MODE_KILL;
- break;
- case 'L':
- if (mode && mode != MODE_LISTDEFS)
- usage_excl(1);
- mode = MODE_LISTDEFS;
- break;
- case 'l':
- if (mode) {
- if (mode == MODE_LIST)
- long_list = 1;
- else
- usage_excl(1);
- }
- mode = MODE_LIST;
- break;
- case 'n':
- SET(flags, MODE_NONINTERACTIVE);
- break;
- case 'P':
- SET(flags, MODE_PRESERVE_GROUPS);
- break;
- case 'p':
- user_prompt = optarg;
- def_passprompt_override = TRUE;
- break;