force valid arguments
This commit is contained in:
parent
65345247fb
commit
49c1c8e424
8 changed files with 38 additions and 24 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -34,7 +34,7 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
|||
|
||||
[[package]]
|
||||
name = "crab"
|
||||
version = "0.0.3"
|
||||
version = "0.0.4"
|
||||
dependencies = [
|
||||
"exec",
|
||||
"nix",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "crab"
|
||||
version = "0.0.3"
|
||||
version = "0.0.4"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
pkgbase = crab
|
||||
pkgdesc = A rusty permission authentication system
|
||||
pkgver = 0.0.3
|
||||
pkgver = 0.0.4
|
||||
pkgrel = 1
|
||||
url = https://g.tylerm.dev/tylermurphy534/crab.git
|
||||
arch = x86_64
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
# Maintainer: Tyler Murphy <tylermurphy534@gmail.com>
|
||||
pkgname=crab
|
||||
pkgver=0.0.3
|
||||
pkgver=0.0.4
|
||||
pkgrel=1
|
||||
pkgdesc="A rusty permission authentication system"
|
||||
arch=('x86_64' 'i686')
|
||||
|
|
34
src/flags.rs
34
src/flags.rs
|
@ -5,7 +5,7 @@ pub struct Flags {
|
|||
pub arg_count: usize
|
||||
}
|
||||
|
||||
pub fn parse(args: &[String]) -> Flags {
|
||||
pub fn parse(args: &[String]) -> Option<Flags> {
|
||||
let mut flags = Flags {
|
||||
help: false,
|
||||
version: false,
|
||||
|
@ -17,15 +17,21 @@ pub fn parse(args: &[String]) -> Flags {
|
|||
flags.arg_count += 1;
|
||||
if arg.starts_with("--") {
|
||||
let flag = &arg[2..];
|
||||
check_flag(&flag, &mut flags);
|
||||
if !set_flag(&flag, &mut flags) {
|
||||
eprintln!("Invalid argument: {}", arg);
|
||||
return None
|
||||
}
|
||||
} else {
|
||||
let flag = &arg[1..];
|
||||
for char in flag.chars() {
|
||||
check_flag(&char.to_string(), &mut flags);
|
||||
if !set_flag(&char.to_string(), &mut flags) {
|
||||
eprintln!("Invalid argument: {}", arg);
|
||||
return None
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
flags
|
||||
Some(flags)
|
||||
}
|
||||
|
||||
fn is_arg(arg: &str) -> bool {
|
||||
|
@ -36,16 +42,18 @@ const HELP_FLAG: &str = "help h";
|
|||
const VERSION_FLAG: &str = "version v";
|
||||
const DONT_PERSIST: &str = "d";
|
||||
|
||||
fn check_flag(arg: &str, flags: &mut Flags) {
|
||||
fn set_flag(arg: &str, flags: &mut Flags) -> bool {
|
||||
if has_flag_set(&arg, HELP_FLAG) {
|
||||
flags.help = true
|
||||
}
|
||||
if has_flag_set(&arg, VERSION_FLAG) {
|
||||
flags.version = true
|
||||
}
|
||||
if has_flag_set(&arg, DONT_PERSIST) {
|
||||
flags.dont_persist = true
|
||||
flags.help = true;
|
||||
return true
|
||||
} else if has_flag_set(&arg, VERSION_FLAG) {
|
||||
flags.version = true;
|
||||
return true
|
||||
} else if has_flag_set(&arg, DONT_PERSIST) {
|
||||
flags.dont_persist = true;
|
||||
return true
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
fn has_flag_set(arg: &str, check: &str) -> bool {
|
||||
|
@ -55,4 +63,4 @@ fn has_flag_set(arg: &str, check: &str) -> bool {
|
|||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,10 +2,9 @@ pub fn help() {
|
|||
let help =
|
||||
"Usage:
|
||||
crab [-d] command [args]
|
||||
|
||||
Options:
|
||||
-v --version Get the current version of the package
|
||||
-h --help Generates the crab help message
|
||||
-d If your user is set to persist, dont save persistance";
|
||||
println!("{}", help);
|
||||
}
|
||||
}
|
||||
|
|
12
src/main.rs
12
src/main.rs
|
@ -5,7 +5,7 @@ use nix::unistd;
|
|||
|
||||
extern crate time;
|
||||
|
||||
// const ERROR_COMMAND: u8 = 1;
|
||||
const ERROR_ARGS: u8 = 1;
|
||||
const ERROR_CONFIG: u8 = 2;
|
||||
const ERROR_NO_USER: u8 = 3;
|
||||
const ERROR_NOT_AUTHORIZED: u8 = 4;
|
||||
|
@ -18,7 +18,13 @@ mod help;
|
|||
|
||||
fn main() -> ExitCode {
|
||||
let args: Vec<String> = env::args().collect();
|
||||
let flags = flags::parse(&args[1..]);
|
||||
let flags = match flags::parse(&args[1..]) {
|
||||
Some(data) => data,
|
||||
None => {
|
||||
help::help();
|
||||
return ExitCode::from(ERROR_ARGS);
|
||||
}
|
||||
};
|
||||
if flags.version {
|
||||
println!("crab version 0.0.3");
|
||||
return ExitCode::SUCCESS;
|
||||
|
@ -132,4 +138,4 @@ fn config(path: &str) -> Option<Config> {
|
|||
users.push((user, persist));
|
||||
}
|
||||
Some(Config{users})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -83,12 +83,13 @@ fn get_terminal_config() -> Option<Value> {
|
|||
}
|
||||
|
||||
fn write_terminal_config(id: &i32, data: &str) -> Result<(), Box<dyn std::error::Error>> {
|
||||
std::fs::write(path(&id), data)?;
|
||||
std::fs::write(path(&id), "")?;
|
||||
unistd::chown(std::path::Path::new(&path(&id)), Some(unistd::Uid::from(0)), Some(unistd::Gid::from(0)))?;
|
||||
let metadata = std::fs::metadata(path(&id))?;
|
||||
let mut perms = metadata.permissions();
|
||||
perms.set_mode(0o660);
|
||||
fs::set_permissions(path(&id), perms)?;
|
||||
std::fs::write(path(&id), data)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -98,4 +99,4 @@ fn now() -> u64 {
|
|||
|
||||
fn path(id: &i32) -> String {
|
||||
return format!("/tmp/crab-{}", id);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue