fix(utils): validate session name (#2607)
* fix(utils): validate session name * cargo fmt * refactor: assign constant values to variables * refactor: move operations unrealted to the condition --------- Co-authored-by: Jae-Heon Ji <atx6419@gmail.com>
This commit is contained in:
parent
e70743e3f1
commit
f1bef8f0d1
2 changed files with 27 additions and 1 deletions
|
|
@ -9,6 +9,30 @@ use serde::{Deserialize, Serialize};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|
||||||
|
fn validate_session(name: &str) -> Result<String, String> {
|
||||||
|
#[cfg(unix)]
|
||||||
|
{
|
||||||
|
use crate::consts::ZELLIJ_SOCK_MAX_LENGTH;
|
||||||
|
|
||||||
|
let mut socket_path = crate::consts::ZELLIJ_SOCK_DIR.clone();
|
||||||
|
socket_path.push(name);
|
||||||
|
|
||||||
|
if socket_path.as_os_str().len() >= ZELLIJ_SOCK_MAX_LENGTH {
|
||||||
|
// socket path must be less than 108 bytes
|
||||||
|
let available_length = ZELLIJ_SOCK_MAX_LENGTH
|
||||||
|
.saturating_sub(socket_path.as_os_str().len())
|
||||||
|
.saturating_sub(1);
|
||||||
|
|
||||||
|
return Err(format!(
|
||||||
|
"session name must be less than {} characters",
|
||||||
|
available_length
|
||||||
|
));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok(name.to_owned())
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Parser, Default, Debug, Clone, Serialize, Deserialize)]
|
#[derive(Parser, Default, Debug, Clone, Serialize, Deserialize)]
|
||||||
#[clap(version, name = "zellij")]
|
#[clap(version, name = "zellij")]
|
||||||
pub struct CliArgs {
|
pub struct CliArgs {
|
||||||
|
|
@ -25,7 +49,7 @@ pub struct CliArgs {
|
||||||
pub server: Option<PathBuf>,
|
pub server: Option<PathBuf>,
|
||||||
|
|
||||||
/// Specify name of a new session
|
/// Specify name of a new session
|
||||||
#[clap(long, short, overrides_with = "session", value_parser)]
|
#[clap(long, short, overrides_with = "session", value_parser = validate_session)]
|
||||||
pub session: Option<String>,
|
pub session: Option<String>,
|
||||||
|
|
||||||
/// Name of a predefined layout inside the layout directory or the path to a layout file
|
/// Name of a predefined layout inside the layout directory or the path to a layout file
|
||||||
|
|
|
||||||
|
|
@ -112,6 +112,8 @@ mod unix_only {
|
||||||
use nix::unistd::Uid;
|
use nix::unistd::Uid;
|
||||||
use std::env::temp_dir;
|
use std::env::temp_dir;
|
||||||
|
|
||||||
|
pub const ZELLIJ_SOCK_MAX_LENGTH: usize = 108;
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
static ref UID: Uid = Uid::current();
|
static ref UID: Uid = Uid::current();
|
||||||
pub static ref ZELLIJ_TMP_DIR: PathBuf = temp_dir().join(format!("zellij-{}", *UID));
|
pub static ref ZELLIJ_TMP_DIR: PathBuf = temp_dir().join(format!("zellij-{}", *UID));
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue