diff --git a/src/nss.rs b/src/nss.rs index 9982492050cfc6db86b569bff3daae90326e7143..e0d5acaed86375cf38b0266b796dd0ed477a638f 100644 --- a/src/nss.rs +++ b/src/nss.rs @@ -73,13 +73,17 @@ fn transform_ent(conf: &Config, row: &mut HashMap<String, Value>, map_name: &str let mapping: HashMap<String, HashMap<String, Value>> = get_optional(&conf, &("nss.maps.".to_string() + map_name)).unwrap_or_default(); for (field, rule) in &mapping { - let type_: String = rule.get("type").ok_or(TransformMappingError { field: field.to_string(), msg: "No type".to_string() })?.as_str().unwrap().to_string(); - let value: &Value = rule.get("value").ok_or(TransformMappingError { field: field.to_string(), msg: "No value".to_string() })?; + let type_: String = rule.get("type") + .ok_or(TransformMappingError { field: field.to_string(), msg: "No type".to_string() })? + .as_str().unwrap().to_string(); + let value: &Value = rule.get("value") + .ok_or(TransformMappingError { field: field.to_string(), msg: "No value".to_string() })?; if type_ == "static" { row.insert(field.to_string(), value.clone()); } else if type_ == "rename" { - let old_value: Value = row.remove(&value.as_str().unwrap().to_string()).ok_or(TransformMappingError { field: field.to_string(), msg: "No value to rename".to_string() })?; + let old_value: Value = row.remove(&value.as_str().unwrap().to_string()) + .ok_or(TransformMappingError { field: field.to_string(), msg: "No value to rename".to_string() })?; row.insert(field.to_string(), old_value); } else { return Err(TransformMappingError { field: field.to_string(), msg: (&("Unknown type ".to_string() + &type_)).to_string() }); @@ -92,13 +96,33 @@ fn transform_ent(conf: &Config, row: &mut HashMap<String, Value>, map_name: &str fn map_to_passwd(conf: &Config, row: &mut HashMap<String, Value>) -> Result<Passwd, TransformMappingError> { transform_ent(&conf, row, "passwd")?; Ok(Passwd { - name: row.get("name").ok_or(TransformMappingError { field: "name".to_string(), msg: "No value in JSON data".to_string() })?.as_str().unwrap().to_string(), - passwd: row.get("passwd").ok_or(TransformMappingError { field: "passwd".to_string(), msg: "No value in JSON data".to_string() })?.as_str().unwrap().to_string(), - uid: row.get("uid").ok_or(TransformMappingError { field: "uid".to_string(), msg: "No value in JSON data".to_string() })?.as_u64().ok_or(TransformMappingError { field: "uid".to_string(), msg: "Invalid integer".to_string() })?.try_into().or(Err(TransformMappingError { field: "uid".to_string(), msg: "Overflow converting to u32".to_string() }))?, - gid: row.get("gid").ok_or(TransformMappingError { field: "gid".to_string(), msg: "No value in JSON data".to_string() })?.as_u64().ok_or(TransformMappingError { field: "gid".to_string(), msg: "Invalid integer".to_string() })?.try_into().or(Err(TransformMappingError { field: "gid".to_string(), msg: "Overflow converting to u32".to_string() }))?, - gecos: row.get("gecos").ok_or(TransformMappingError { field: "gecos".to_string(), msg: "No value in JSON data".to_string() })?.as_str().unwrap().to_string(), - dir: row.get("dir").ok_or(TransformMappingError { field: "dir".to_string(), msg: "No value in JSON data".to_string() })?.as_str().unwrap().to_string(), - shell: row.get("shell").ok_or(TransformMappingError { field: "shell".to_string(), msg: "No value in JSON data".to_string() })?.as_str().unwrap().to_string(), + name: row.get("name") + .ok_or(TransformMappingError { field: "name".to_string(), msg: "No value in JSON data".to_string() })? + .as_str().unwrap().to_string(), + passwd: row.get("passwd") + .ok_or(TransformMappingError { field: "passwd".to_string(), msg: "No value in JSON data".to_string() })? + .as_str().unwrap().to_string(), + uid: row.get("uid") + .ok_or(TransformMappingError { field: "uid".to_string(), msg: "No value in JSON data".to_string() })? + .as_u64() + .ok_or(TransformMappingError { field: "uid".to_string(), msg: "Invalid integer".to_string() })? + .try_into() + .or(Err(TransformMappingError { field: "uid".to_string(), msg: "Overflow converting to u32".to_string() }))?, + gid: row.get("gid") + .ok_or(TransformMappingError { field: "gid".to_string(), msg: "No value in JSON data".to_string() })? + .as_u64() + .ok_or(TransformMappingError { field: "gid".to_string(), msg: "Invalid integer".to_string() })? + .try_into() + .or(Err(TransformMappingError { field: "gid".to_string(), msg: "Overflow converting to u32".to_string() }))?, + gecos: row.get("gecos") + .ok_or(TransformMappingError { field: "gecos".to_string(), msg: "No value in JSON data".to_string() })? + .as_str().unwrap().to_string(), + dir: row.get("dir") + .ok_or(TransformMappingError { field: "dir".to_string(), msg: "No value in JSON data".to_string() })? + .as_str().unwrap().to_string(), + shell: row.get("shell") + .ok_or(TransformMappingError { field: "shell".to_string(), msg: "No value in JSON data".to_string() })? + .as_str().unwrap().to_string(), }) }