mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
For systems without SE: - Do not exit with an error if `--version` is specified but print the version - Do not exit with an error if `--se-status` is specified but print `Secure Execution is not enabled` Closes: https://github.com/ibm-s390-linux/s390-tools/issues/197 Closes: https://github.com/ibm-s390-linux/s390-tools/issues/198 Reported-by: Dan Horák <dan@danny.cz> Reviewed-by: Jan Höppner <hoeppner@linux.ibm.com> Signed-off-by: Steffen Eiden <seiden@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
68 lines
1.7 KiB
Rust
68 lines
1.7 KiB
Rust
// SPDX-License-Identifier: MIT
|
|
//
|
|
// Copyright IBM Corp. 2025
|
|
|
|
//! Main function for the PV Info Tool
|
|
|
|
use anyhow::Result;
|
|
use clap::Parser;
|
|
use std::io::{self, Write};
|
|
|
|
mod cli;
|
|
mod constants;
|
|
mod handlers;
|
|
mod io_utils;
|
|
mod pvinfo;
|
|
mod se_status;
|
|
mod strings;
|
|
|
|
use crate::cli::{CliOptions, Commands, OutputFormat};
|
|
use crate::constants::*;
|
|
use crate::handlers::handle_supported_flags;
|
|
use crate::io_utils::check_uv_exists;
|
|
use crate::pvinfo::PvInfo;
|
|
use crate::se_status::SeStatus;
|
|
use std::path::PathBuf;
|
|
|
|
fn main() -> Result<()> {
|
|
// Parse CLI arguments and apply post-processing
|
|
let mut cli = CliOptions::parse();
|
|
cli.post_process();
|
|
let base_dir = PathBuf::from(BASE_DIR);
|
|
let query_dir = base_dir.join(QUERY_DIR);
|
|
let mut stdout = io::stdout();
|
|
if cli.version {
|
|
utils::print_version!(2025);
|
|
return Ok(());
|
|
}
|
|
if let Err(e) = check_uv_exists() {
|
|
match cli.se_status {
|
|
true => {
|
|
writeln!(stdout, "{}", SeStatus::Unsecure)?;
|
|
return Ok(());
|
|
}
|
|
false => return Err(e),
|
|
}
|
|
}
|
|
match &cli.command {
|
|
// Handle the supported-flags subcommand
|
|
Some(Commands::SupportedFlags {
|
|
secret,
|
|
attestation,
|
|
header,
|
|
}) => {
|
|
handle_supported_flags(&mut stdout, *secret, *attestation, *header, query_dir)?;
|
|
}
|
|
None => {
|
|
let data = PvInfo::read(&cli, &base_dir, &query_dir);
|
|
// Print output in the requested format
|
|
match cli.format {
|
|
OutputFormat::Human => data.write(&mut stdout)?,
|
|
OutputFormat::Yaml => write!(stdout, "{}", serde_yaml::to_string(&data).unwrap())?,
|
|
}
|
|
}
|
|
}
|
|
|
|
Ok(())
|
|
}
|