Skip to content

Commit abd7043

Browse files
committed
subdomain format also kubernetes-specific
1 parent be30a23 commit abd7043

File tree

1 file changed

+33
-28
lines changed

1 file changed

+33
-28
lines changed

crates/stackable-operator/src/validation.rs

Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,18 @@ const RFC_1123_LABEL_FMT: &str = "[a-zA-Z0-9]([-a-zA-Z0-9]*[a-zA-Z0-9])?";
2626

2727
/// This is a subdomain's max length in DNS (RFC 1123)
2828
const RFC_1123_SUBDOMAIN_MAX_LENGTH: usize = 253;
29-
const RFC_1123_SUBDOMAIN_FMT: &str =
30-
concatcp!(RFC_1123_LABEL_FMT, "(\\.", RFC_1123_LABEL_FMT, ")*");
29+
const RFC_1123_SUBDOMAIN_FMT: &str = concatcp!(
30+
LOWERCASE_RFC_1123_LABEL_FMT,
31+
"(\\.",
32+
LOWERCASE_RFC_1123_LABEL_FMT,
33+
")*"
34+
);
3135
const RFC_1123_SUBDOMAIN_ERROR_MSG: &str = "a RFC 1123 subdomain must consist of alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character";
3236

3337
const DOMAIN_MAX_LENGTH: usize = RFC_1123_SUBDOMAIN_MAX_LENGTH;
34-
/// Same as [`RFC_1123_SUBDOMAIN_FMT`], but allows a trailing dot
35-
const DOMAIN_FMT: &str = concatcp!(RFC_1123_SUBDOMAIN_FMT, "\\.?");
38+
39+
/// Same as [`RFC_1123_LABEL_FMT`], but allows a trailing dot
40+
const DOMAIN_FMT: &str = concatcp!(RFC_1123_LABEL_FMT, "(\\.", RFC_1123_LABEL_FMT, ")*\\.?");
3641
const DOMAIN_ERROR_MSG: &str = "a domain must consist of alphanumeric characters, '-' or '.', and must start with an alphanumeric character and end with an alphanumeric character or '.'";
3742

3843
// FIXME: According to https://www.rfc-editor.org/rfc/rfc1035#section-2.3.1 domain names must start with a letter
@@ -303,6 +308,12 @@ mod tests {
303308

304309
#[rstest]
305310
#[case("")]
311+
#[case("A")]
312+
#[case("aBc")]
313+
#[case("ABC")]
314+
#[case("A1")]
315+
#[case("A-1")]
316+
#[case("1-A")]
306317
#[case("-")]
307318
#[case("a-")]
308319
#[case("-a")]
@@ -329,6 +340,24 @@ mod tests {
329340
#[case("1 ")]
330341
#[case(" 1")]
331342
#[case("1 2")]
343+
#[case("A.a")]
344+
#[case("aB.a")]
345+
#[case("ab.A")]
346+
#[case("A1.a")]
347+
#[case("a1.A")]
348+
#[case("A.1")]
349+
#[case("aB.1")]
350+
#[case("A1.1")]
351+
#[case("0.A")]
352+
#[case("01.A")]
353+
#[case("012.A")]
354+
#[case("1A.a")]
355+
#[case("1a.A")]
356+
#[case("1A.1")]
357+
#[case("a.B.c.d.e")]
358+
#[case("A.B.C.D.E")]
359+
#[case("aa.bB.cc.dd.ee")]
360+
#[case("AA.BB.CC.DD.EE")]
332361
#[case("a@b")]
333362
#[case("a,b")]
334363
#[case("a_b")]
@@ -344,67 +373,43 @@ mod tests {
344373

345374
#[rstest]
346375
#[case("a")]
347-
#[case("A")]
348376
#[case("ab")]
349377
#[case("abc")]
350-
#[case("aBc")]
351-
#[case("ABC")]
352378
#[case("a1")]
353-
#[case("A1")]
354379
#[case("a-1")]
355-
#[case("A-1")]
356380
#[case("a--1--2--b")]
357381
#[case("0")]
358382
#[case("01")]
359383
#[case("012")]
360384
#[case("1a")]
361385
#[case("1-a")]
362-
#[case("1-A")]
363386
#[case("1--a--b--2")]
364387
#[case("a.a")]
365-
#[case("A.a")]
366388
#[case("ab.a")]
367-
#[case("aB.a")]
368-
#[case("ab.A")]
369389
#[case("abc.a")]
370390
#[case("a1.a")]
371-
#[case("A1.a")]
372-
#[case("a1.A")]
373391
#[case("a-1.a")]
374392
#[case("a--1--2--b.a")]
375393
#[case("a.1")]
376-
#[case("A.1")]
377394
#[case("ab.1")]
378-
#[case("aB.1")]
379395
#[case("abc.1")]
380396
#[case("a1.1")]
381-
#[case("A1.1")]
382397
#[case("a-1.1")]
383398
#[case("a--1--2--b.1")]
384399
#[case("0.a")]
385-
#[case("0.A")]
386400
#[case("01.a")]
387-
#[case("01.A")]
388401
#[case("012.a")]
389-
#[case("012.A")]
390402
#[case("1a.a")]
391-
#[case("1A.a")]
392-
#[case("1a.A")]
393403
#[case("1-a.a")]
394404
#[case("1--a--b--2")]
395405
#[case("0.1")]
396406
#[case("01.1")]
397407
#[case("012.1")]
398408
#[case("1a.1")]
399-
#[case("1A.1")]
400409
#[case("1-a.1")]
401410
#[case("1--a--b--2.1")]
402411
#[case("a.b.c.d.e")]
403-
#[case("a.B.c.d.e")]
404-
#[case("A.B.C.D.E")]
405412
#[case("aa.bb.cc.dd.ee")]
406-
#[case("aa.bB.cc.dd.ee")]
407-
#[case("AA.BB.CC.DD.EE")]
408413
#[case("1.2.3.4.5")]
409414
#[case("11.22.33.44.55")]
410415
#[case(&"a".repeat(253))]

0 commit comments

Comments
 (0)