On Thu, Sep 15, 2022 at 04:29:36AM -0400, Varik Valefor wrote:
> This change removes a fairly large routine from a large function and places
> the fairly large routine into a dedicated function. The decreasing of the
> length of the main function should increase the readability of the large
> function.
This patch does not apply cleanly onto current CVS for me.
>
> Varik Valefor
> "When lost, just pure :: Monad m => a -> m a."
>
> diff --git a/sbin/bioctl/bioctl.c b/sbin/bioctl/bioctl.c
> index 58561e5f30f..19963ad762f 100644
> --- a/sbin/bioctl/bioctl.c
> +++ b/sbin/bioctl/bioctl.c
> @@ -1307,6 +1307,29 @@ bcrypt_pbkdf_autorounds(void)
>
> return r;
> }
> +void
> +readpassphrasefile(char *passphrase, FILE *f, size_t pl, struct stat sb)
> +{
*f, pl and sb are still declared in derive_key() but unused there,
so they might as well be local to this new function.
> + if ((f = fopen(password, "r")) == NULL)
> + err(1, "invalid passphrase file");
> +
> + if (fstat(fileno(f), &sb) == -1)
> + err(1, "can't stat passphrase file");
> + if (sb.st_uid != 0)
> + errx(1, "passphrase file must be owned by root");
> + if ((sb.st_mode & ~S_IFMT) != (S_IRUSR | S_IWUSR))
> + errx(1, "passphrase file has the wrong permissions");
> +
> + if (fgets(passphrase, sizeof(passphrase), f) == NULL)
> + err(1, "can't read passphrase file");
> + pl = strlen(passphrase);
> + if (pl > 0 && passphrase[pl - 1] == '\n')
> + passphrase[pl - 1] = '\0';
> + else
> + errx(1, "invalid passphrase length");
> +
> + fclose(f);
> +}
>
> void
> derive_key(u_int32_t type, int rounds, u_int8_t *key, size_t keysz,
> @@ -1331,25 +1354,7 @@ derive_key(u_int32_t type, int rounds, u_int8_t *key,
> size_t keysz,
>
> /* get passphrase */
> if (password) {
> - if ((f = fopen(password, "r")) == NULL)
> - err(1, "invalid passphrase file");
> -
> - if (fstat(fileno(f), &sb) == -1)
> - err(1, "can't stat passphrase file");
> - if (sb.st_uid != 0)
> - errx(1, "passphrase file must be owned by root");
> - if ((sb.st_mode & ~S_IFMT) != (S_IRUSR | S_IWUSR))
> - errx(1, "passphrase file has the wrong
> permissions");
> -
> - if (fgets(passphrase, sizeof(passphrase), f) == NULL)
> - err(1, "can't read passphrase file");
> - pl = strlen(passphrase);
> - if (pl > 0 && passphrase[pl - 1] == '\n')
> - passphrase[pl - 1] = '\0';
> - else
> - errx(1, "invalid passphrase length");
> -
> - fclose(f);
> + readpassphrasefile(passphrase, f, pl, sb);
> } else {
> if (readpassphrase(prompt, passphrase, sizeof(passphrase),
> rpp_flag) == NULL)
>