From ca359551fff53b271830543901457813a77ba177 Mon Sep 17 00:00:00 2001 From: Benjamin Bennett Date: Thu, 21 Apr 2022 14:40:18 +0100 Subject: [PATCH] Adding check to ensure that length for random_string and random_password >= min_upper + min_lower + min_numeric _ min_special (#233) --- internal/provider/resource_string_test.go | 9 +++++++++ internal/provider/string.go | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/internal/provider/resource_string_test.go b/internal/provider/resource_string_test.go index 65e69f2f..20562061 100644 --- a/internal/provider/resource_string_test.go +++ b/internal/provider/resource_string_test.go @@ -64,6 +64,10 @@ func TestAccResourceString(t *testing.T) { ImportStateVerify: true, ImportStateVerifyIgnore: []string{"length", "lower", "number", "special", "upper", "min_lower", "min_numeric", "min_special", "min_upper", "override_special"}, }, + { + Config: testAccResourceStringInvalidConfig, + ExpectError: regexp.MustCompile("Error running apply: exit status 1"), + }, }, }) } @@ -153,4 +157,9 @@ resource "random_string" "min" { min_numeric = 4 } ` + testAccResourceStringInvalidConfig = ` +resource "random_string" "invalid_length" { + length = 2 + min_lower = 3 +}` ) diff --git a/internal/provider/string.go b/internal/provider/string.go index b460bff4..7242b753 100644 --- a/internal/provider/string.go +++ b/internal/provider/string.go @@ -6,6 +6,7 @@ package provider import ( "context" "crypto/rand" + "fmt" "math/big" "sort" @@ -144,6 +145,13 @@ func createStringFunc(sensitive bool) func(_ context.Context, d *schema.Resource minSpecial := d.Get("min_special").(int) overrideSpecial := d.Get("override_special").(string) + if length < minUpper+minLower+minNumeric+minSpecial { + return append(diags, diag.Diagnostic{ + Severity: diag.Error, + Summary: fmt.Sprintf("length (%d) must be >= min_upper + min_lower + min_numeric + min_special (%d)", length, minUpper+minLower+minNumeric+minSpecial), + }) + } + if overrideSpecial != "" { specialChars = overrideSpecial }