From d3739d3d06d7a7747f80892babe0c1a15747498d Mon Sep 17 00:00:00 2001 From: NoOneBtw Date: Wed, 17 Nov 2021 14:42:14 +0100 Subject: [PATCH] automatically set permissions on `unix` --- src/bin/duralumin-keygen.rs | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/bin/duralumin-keygen.rs b/src/bin/duralumin-keygen.rs index cdfb86a..4c4dbbd 100644 --- a/src/bin/duralumin-keygen.rs +++ b/src/bin/duralumin-keygen.rs @@ -1,8 +1,8 @@ -use std::io::Write; +use std::{fs::Permissions, io::Write}; use clap::Parser; use libduralumin::ed25519::{generate_ed25519_keypair, randomart}; -use osshkeys::{error::OsshResult, Key, PublicParts}; +use osshkeys::{error::OsshResult, PublicParts}; /// program that generates ed25519 keypairs seeded by a passphrase and an optional ID. #[derive(Parser)] @@ -25,6 +25,8 @@ fn fix_newline_ref(line: &mut String) { } } } + +#[allow(dead_code)] fn fix_newline(mut line: String) -> String { fix_newline_ref(&mut line); @@ -94,14 +96,24 @@ fn main() -> OsshResult<()> { println!("RandomArt:\n{}", randomart); + let private_path = opts.file.clone(); + let public_path = opts.file.clone() + ".pub"; + let private_key = keypair.serialize_openssh( encrypt.then(|| passphrase.as_str()), osshkeys::cipher::Cipher::Aes256_Ctr, )?; - std::fs::write(&opts.file, private_key)?; + std::fs::write(&private_path, private_key)?; let public_key = keypair.serialize_publickey()?; - std::fs::write(opts.file + ".pub", public_key)?; + std::fs::write(&public_path, public_key)?; + + use std::os::unix::fs::PermissionsExt; + + #[cfg(target_family = "unix")] + std::fs::set_permissions(private_path, Permissions::from_mode(0o0600))?; + #[cfg(target_family = "unix")] + std::fs::set_permissions(public_path, Permissions::from_mode(0o0600))?; Ok(()) }