Skip to content

Commit 6b5fa06

Browse files
committed
Add SLURM version check
1 parent 34957c4 commit 6b5fa06

File tree

1 file changed

+33
-1
lines changed

1 file changed

+33
-1
lines changed

src/slurm.rs

+33-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use std::{borrow, error, fmt, io, ops};
1212
use std::str::FromStr;
1313
use bytes::Bytes;
14+
use serde::de::Error;
1415
use serde::{Deserialize, Serialize};
1516
use crate::crypto::keys::KeyIdentifier;
1617
use crate::resources::addr::{MaxLenPrefix, Prefix};
@@ -95,7 +96,19 @@ impl FromStr for SlurmFile {
9596
type Err = serde_json::Error;
9697

9798
fn from_str(s: &str) -> Result<Self, Self::Err> {
98-
serde_json::from_str(s)
99+
let slurm: Result<SlurmFile, serde_json::Error> = serde_json::from_str(s);
100+
if let Ok(s) = &slurm {
101+
if s.version == SlurmVersion::v1() &&
102+
(s.assertions.aspa.is_some() || s.filters.aspa.is_some()) {
103+
return Err(Self::Err::custom(
104+
"ASPA field present in SLURM v1"));
105+
} else if s.version == SlurmVersion::v2() &&
106+
(s.assertions.aspa.is_none() || s.filters.aspa.is_none()) {
107+
return Err(Self::Err::custom(
108+
"ASPA field not present in SLURM v2"));
109+
}
110+
}
111+
slurm
99112
}
100113
}
101114

@@ -1474,6 +1487,25 @@ mod test {
14741487
"##
14751488
).is_err()
14761489
);
1490+
1491+
// wrong SLURM version.
1492+
assert!(
1493+
SlurmFile::from_str(
1494+
r##"
1495+
{
1496+
"slurmVersion": 2,
1497+
"validationOutputFilters": {
1498+
"prefixFilters": [],
1499+
"bgpsecFilters": []
1500+
},
1501+
"locallyAddedAssertions": {
1502+
"prefixAssertions": [],
1503+
"bgpsecAssertions": []
1504+
}
1505+
}
1506+
"##
1507+
).is_err()
1508+
);
14771509
}
14781510
}
14791511

0 commit comments

Comments
 (0)