Files
s390-tools/rust/pvinfo/src/main.rs
Steffen Eiden fef70e3e95 pvinfo: Improve User experience on non-SE enabled systems
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>
2026-02-06 18:08:58 +01:00

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(())
}