I am not a fan of this.  Why wouldn't you do this in the wrapping
script?

I added some style nits too for future reference

On Sun, Sep 12, 2010 at 11:42:26PM +0200, Merlyn wrote:
> Index: bioctl.c
> ===================================================================
> RCS file: /cvs/src/sbin/bioctl/bioctl.c,v
> retrieving revision 1.97
> diff -u -p -r1.97 bioctl.c
> --- bioctl.c  10 Jul 2010 02:56:16 -0000      1.97
> +++ bioctl.c  12 Sep 2010 21:40:23 -0000
> @@ -71,7 +71,7 @@ int                 bio_getvolbyname(char *);
>  void                 bio_setstate(char *, int, char *);
>  void                 bio_setblink(char *, char *, int);
>  void                 bio_blink(char *, int, int);
> -void                 bio_createraid(u_int16_t, char *, char *);
> +int                  bio_createraid(u_int16_t, char *, char *);
>  void                 bio_deleteraid(char *);
>  void                 bio_changepass(char *);
>  u_int32_t            bio_createflags(char *);
> @@ -102,11 +102,14 @@ main(int argc, char *argv[])
>       int                     ss_func = 0;
>       u_int16_t               cr_level = 0;
>       int                     biodev = 0;
> +     int                     success = 0;
> +     int                     more_tries = 0;
> +     int                     retries = 0;
> 
>       if (argc < 2)
>               usage();
> 
> -     while ((ch = getopt(argc, argv, "a:b:C:c:dH:hik:l:Pp:qr:R:vu:")) !=
> +     while ((ch = getopt(argc, argv, "a:b:C:c:dH:hik:l:Pp:qr:R:t:vu:")) !=
>           -1) {
>               switch (ch) {
>               case 'a': /* alarm */
> @@ -132,6 +135,14 @@ main(int argc, char *argv[])
>                       /* delete volume */
>                       func |= BIOC_DELETERAID;
>                       break;
> +             case 't':
> +                     /* ask for password retries-times */
> +                     more_tries = 1;
> +                     retries = strtonum(optarg, 0, 1000, &errstr);
> +                     if (errstr != NULL)
> +                             errx(1, "Number of retries is %s: %s",
> +                                     errstr, optarg);
> +                     break;
>               case 'u': /* unblink */
>                       func |= BIOC_BLINK;
>                       blink = BIOC_SBUNBLINK;
> @@ -234,7 +245,17 @@ main(int argc, char *argv[])
>                       errx(1, "need -l parameter");
>               if (!biodev)
>                       errx(1, "must use bio device");
> -             bio_createraid(cr_level, dev_list, key_disk);
> +             if (more_tries == 1)
> +                     if ( retries == 0 )
> +                             do
> +                                     success=bio_createraid(cr_level, 
> dev_list, key_disk);
> +                             while ( success == -1 );
                                       ^ no space    ^
> +                     else
> +                             do
> +                                     success=bio_createraid(cr_level, 
> dev_list, key_disk);
> +                             while ( --retries > 0 && success == -1 );
                                       ^ no space there               ^
> +             else
> +                     bio_createraid(cr_level, dev_list, key_disk);
>       }
> 
>       return (0);
> @@ -255,7 +276,8 @@ usage(void)
>                  "       %s [-dhiPqv] "
>                  "[-C flag[,flag,...]] [-c raidlevel] [-k keydisk]\n"
>                  "\t[-l special[,special,...]] [-p passfile]\n"
> -                "\t[-R device | channel:target[.lun] [-r rounds] "
> +                "\t[-R device | channel:target[.lun] [-r rounds]\n"
> +             "\t[-t retries] "
>               "device\n", __progname, __progname);
>       
>       exit(1);
> @@ -685,7 +707,7 @@ bio_blink(char *enclosure, int target, i
>       close(bioh);
>  }
> 
> -void
> +int
>  bio_createraid(u_int16_t level, char *dev_list, char *key_disk)
>  {
>       struct bioc_createraid  create;
> @@ -798,8 +820,10 @@ bio_createraid(u_int16_t level, char *de
>       memset(&kdfinfo, 0, sizeof(kdfinfo));
>       memset(&create, 0, sizeof(create));
>       if (rv == -1) {
> -             if (errno == EPERM)
> -                     errx(1, "Incorrect passphrase");
> +             if (errno == EPERM) {
> +                     fprintf(stderr,"Incorrect passphrase\n");
> +                     return -1;
> +             }
>               err(1, "BIOCCREATERAID");
>       }

Reply via email to