summaryrefslogtreecommitdiff
path: root/cli/ops
diff options
context:
space:
mode:
Diffstat (limited to 'cli/ops')
-rw-r--r--cli/ops/fs.rs48
-rw-r--r--cli/ops/os.rs2
-rw-r--r--cli/ops/permissions.rs27
-rw-r--r--cli/ops/plugin.rs5
4 files changed, 35 insertions, 47 deletions
diff --git a/cli/ops/fs.rs b/cli/ops/fs.rs
index 9d5be3077..ce7045e21 100644
--- a/cli/ops/fs.rs
+++ b/cli/ops/fs.rs
@@ -3,7 +3,6 @@
use super::dispatch_json::{blocking_json, Deserialize, JsonOp, Value};
use super::io::std_file_resource;
use super::io::{FileMetadata, StreamResource, StreamResourceHolder};
-use crate::fs::resolve_from_cwd;
use crate::op_error::OpError;
use crate::ops::dispatch_json::JsonResult;
use crate::state::State;
@@ -75,7 +74,7 @@ fn op_open(
_zero_copy: Option<ZeroCopyBuf>,
) -> Result<JsonOp, OpError> {
let args: OpenArgs = serde_json::from_value(args)?;
- let path = resolve_from_cwd(Path::new(&args.path))?;
+ let path = Path::new(&args.path).to_path_buf();
let resource_table = isolate.resource_table.clone();
let mut open_options = std::fs::OpenOptions::new();
@@ -274,7 +273,7 @@ fn op_mkdir(
_zero_copy: Option<ZeroCopyBuf>,
) -> Result<JsonOp, OpError> {
let args: MkdirArgs = serde_json::from_value(args)?;
- let path = resolve_from_cwd(Path::new(&args.path))?;
+ let path = Path::new(&args.path).to_path_buf();
let mode = args.mode.unwrap_or(0o777) & 0o777;
state.check_write(&path)?;
@@ -308,7 +307,7 @@ fn op_chmod(
_zero_copy: Option<ZeroCopyBuf>,
) -> Result<JsonOp, OpError> {
let args: ChmodArgs = serde_json::from_value(args)?;
- let path = resolve_from_cwd(Path::new(&args.path))?;
+ let path = Path::new(&args.path).to_path_buf();
let mode = args.mode & 0o777;
state.check_write(&path)?;
@@ -348,7 +347,7 @@ fn op_chown(
_zero_copy: Option<ZeroCopyBuf>,
) -> Result<JsonOp, OpError> {
let args: ChownArgs = serde_json::from_value(args)?;
- let path = resolve_from_cwd(Path::new(&args.path))?;
+ let path = Path::new(&args.path).to_path_buf();
state.check_write(&path)?;
@@ -387,7 +386,7 @@ fn op_remove(
_zero_copy: Option<ZeroCopyBuf>,
) -> Result<JsonOp, OpError> {
let args: RemoveArgs = serde_json::from_value(args)?;
- let path = resolve_from_cwd(Path::new(&args.path))?;
+ let path = PathBuf::from(&args.path);
let recursive = args.recursive;
state.check_write(&path)?;
@@ -438,8 +437,8 @@ fn op_copy_file(
_zero_copy: Option<ZeroCopyBuf>,
) -> Result<JsonOp, OpError> {
let args: CopyFileArgs = serde_json::from_value(args)?;
- let from = resolve_from_cwd(Path::new(&args.from))?;
- let to = resolve_from_cwd(Path::new(&args.to))?;
+ let from = PathBuf::from(&args.from);
+ let to = PathBuf::from(&args.to);
state.check_read(&from)?;
state.check_write(&to)?;
@@ -532,7 +531,7 @@ fn op_stat(
_zero_copy: Option<ZeroCopyBuf>,
) -> Result<JsonOp, OpError> {
let args: StatArgs = serde_json::from_value(args)?;
- let path = resolve_from_cwd(Path::new(&args.path))?;
+ let path = PathBuf::from(&args.path);
let lstat = args.lstat;
state.check_read(&path)?;
@@ -562,9 +561,12 @@ fn op_realpath(
_zero_copy: Option<ZeroCopyBuf>,
) -> Result<JsonOp, OpError> {
let args: RealpathArgs = serde_json::from_value(args)?;
- let path = resolve_from_cwd(Path::new(&args.path))?;
+ let path = PathBuf::from(&args.path);
state.check_read(&path)?;
+ if path.is_relative() {
+ state.check_read_blind(&current_dir()?, "CWD")?;
+ }
let is_sync = args.promise_id.is_none();
blocking_json(is_sync, move || {
@@ -594,7 +596,7 @@ fn op_read_dir(
_zero_copy: Option<ZeroCopyBuf>,
) -> Result<JsonOp, OpError> {
let args: ReadDirArgs = serde_json::from_value(args)?;
- let path = resolve_from_cwd(Path::new(&args.path))?;
+ let path = PathBuf::from(&args.path);
state.check_read(&path)?;
@@ -637,8 +639,8 @@ fn op_rename(
_zero_copy: Option<ZeroCopyBuf>,
) -> Result<JsonOp, OpError> {
let args: RenameArgs = serde_json::from_value(args)?;
- let oldpath = resolve_from_cwd(Path::new(&args.oldpath))?;
- let newpath = resolve_from_cwd(Path::new(&args.newpath))?;
+ let oldpath = PathBuf::from(&args.oldpath);
+ let newpath = PathBuf::from(&args.newpath);
state.check_read(&oldpath)?;
state.check_write(&oldpath)?;
@@ -667,8 +669,8 @@ fn op_link(
) -> Result<JsonOp, OpError> {
state.check_unstable("Deno.link");
let args: LinkArgs = serde_json::from_value(args)?;
- let oldpath = resolve_from_cwd(Path::new(&args.oldpath))?;
- let newpath = resolve_from_cwd(Path::new(&args.newpath))?;
+ let oldpath = PathBuf::from(&args.oldpath);
+ let newpath = PathBuf::from(&args.newpath);
state.check_read(&oldpath)?;
state.check_write(&newpath)?;
@@ -705,8 +707,8 @@ fn op_symlink(
) -> Result<JsonOp, OpError> {
state.check_unstable("Deno.symlink");
let args: SymlinkArgs = serde_json::from_value(args)?;
- let oldpath = resolve_from_cwd(Path::new(&args.oldpath))?;
- let newpath = resolve_from_cwd(Path::new(&args.newpath))?;
+ let oldpath = PathBuf::from(&args.oldpath);
+ let newpath = PathBuf::from(&args.newpath);
state.check_write(&newpath)?;
@@ -764,7 +766,7 @@ fn op_read_link(
_zero_copy: Option<ZeroCopyBuf>,
) -> Result<JsonOp, OpError> {
let args: ReadLinkArgs = serde_json::from_value(args)?;
- let path = resolve_from_cwd(Path::new(&args.path))?;
+ let path = PathBuf::from(&args.path);
state.check_read(&path)?;
@@ -791,7 +793,7 @@ fn op_truncate(
_zero_copy: Option<ZeroCopyBuf>,
) -> Result<JsonOp, OpError> {
let args: TruncateArgs = serde_json::from_value(args)?;
- let path = resolve_from_cwd(Path::new(&args.path))?;
+ let path = PathBuf::from(&args.path);
let len = args.len;
state.check_write(&path)?;
@@ -866,7 +868,7 @@ fn op_make_temp_dir(
) -> Result<JsonOp, OpError> {
let args: MakeTempArgs = serde_json::from_value(args)?;
- let dir = args.dir.map(|s| resolve_from_cwd(Path::new(&s)).unwrap());
+ let dir = args.dir.map(|s| PathBuf::from(&s));
let prefix = args.prefix.map(String::from);
let suffix = args.suffix.map(String::from);
@@ -897,7 +899,7 @@ fn op_make_temp_file(
) -> Result<JsonOp, OpError> {
let args: MakeTempArgs = serde_json::from_value(args)?;
- let dir = args.dir.map(|s| resolve_from_cwd(Path::new(&s)).unwrap());
+ let dir = args.dir.map(|s| PathBuf::from(&s));
let prefix = args.prefix.map(String::from);
let suffix = args.suffix.map(String::from);
@@ -938,7 +940,7 @@ fn op_utime(
state.check_unstable("Deno.utime");
let args: UtimeArgs = serde_json::from_value(args)?;
- let path = resolve_from_cwd(Path::new(&args.path))?;
+ let path = PathBuf::from(&args.path);
state.check_write(&path)?;
@@ -956,7 +958,7 @@ fn op_cwd(
_zero_copy: Option<ZeroCopyBuf>,
) -> Result<JsonOp, OpError> {
let path = current_dir()?;
- state.check_read(&path)?;
+ state.check_read_blind(&path, "CWD")?;
let path_str = into_string(path.into_os_string())?;
Ok(JsonOp::Sync(json!(path_str)))
}
diff --git a/cli/ops/os.rs b/cli/ops/os.rs
index 6c1801520..1dd2ddc4f 100644
--- a/cli/ops/os.rs
+++ b/cli/ops/os.rs
@@ -83,7 +83,7 @@ fn op_exec_path(
_zero_copy: Option<ZeroCopyBuf>,
) -> Result<JsonOp, OpError> {
let current_exe = env::current_exe().unwrap();
- state.check_read(&current_exe)?;
+ state.check_read_blind(&current_exe, "exec_path")?;
// Now apply URL parser to current exe to get fully resolved path, otherwise
// we might get `./` and `../` bits in `exec_path`
let exe_url = Url::from_file_path(current_exe).unwrap();
diff --git a/cli/ops/permissions.rs b/cli/ops/permissions.rs
index 3ccff4065..13a8f3bb8 100644
--- a/cli/ops/permissions.rs
+++ b/cli/ops/permissions.rs
@@ -1,6 +1,5 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
use super::dispatch_json::{Deserialize, JsonOp, Value};
-use crate::fs as deno_fs;
use crate::op_error::OpError;
use crate::state::State;
use deno_core::CoreIsolate;
@@ -29,14 +28,6 @@ struct PermissionArgs {
path: Option<String>,
}
-fn resolve_path(path: &str) -> String {
- deno_fs::resolve_from_cwd(Path::new(path))
- .unwrap()
- .to_str()
- .unwrap()
- .to_string()
-}
-
pub fn op_query_permission(
state: &State,
args: Value,
@@ -44,11 +35,11 @@ pub fn op_query_permission(
) -> Result<JsonOp, OpError> {
let args: PermissionArgs = serde_json::from_value(args)?;
let state = state.borrow();
- let resolved_path = args.path.as_deref().map(resolve_path);
+ let path = args.path.as_deref();
let perm = state.permissions.get_permission_state(
&args.name,
&args.url.as_deref(),
- &resolved_path.as_deref().map(Path::new),
+ &path.as_deref().map(Path::new),
)?;
Ok(JsonOp::Sync(json!({ "state": perm.to_string() })))
}
@@ -71,11 +62,11 @@ pub fn op_revoke_permission(
"hrtime" => permissions.allow_hrtime.revoke(),
_ => {}
};
- let resolved_path = args.path.as_deref().map(resolve_path);
+ let path = args.path.as_deref();
let perm = permissions.get_permission_state(
&args.name,
&args.url.as_deref(),
- &resolved_path.as_deref().map(Path::new),
+ &path.as_deref().map(Path::new),
)?;
Ok(JsonOp::Sync(json!({ "state": perm.to_string() })))
}
@@ -88,15 +79,11 @@ pub fn op_request_permission(
let args: PermissionArgs = serde_json::from_value(args)?;
let mut state = state.borrow_mut();
let permissions = &mut state.permissions;
- let resolved_path = args.path.as_deref().map(resolve_path);
+ let path = args.path.as_deref();
let perm = match args.name.as_ref() {
"run" => Ok(permissions.request_run()),
- "read" => {
- Ok(permissions.request_read(&resolved_path.as_deref().map(Path::new)))
- }
- "write" => {
- Ok(permissions.request_write(&resolved_path.as_deref().map(Path::new)))
- }
+ "read" => Ok(permissions.request_read(&path.as_deref().map(Path::new))),
+ "write" => Ok(permissions.request_write(&path.as_deref().map(Path::new))),
"net" => permissions.request_net(&args.url.as_deref()),
"env" => Ok(permissions.request_env()),
"plugin" => Ok(permissions.request_plugin()),
diff --git a/cli/ops/plugin.rs b/cli/ops/plugin.rs
index cabb3329d..f55c91df8 100644
--- a/cli/ops/plugin.rs
+++ b/cli/ops/plugin.rs
@@ -1,5 +1,4 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
-use crate::fs::resolve_from_cwd;
use crate::op_error::OpError;
use crate::ops::dispatch_json::Deserialize;
use crate::ops::dispatch_json::JsonOp;
@@ -14,7 +13,7 @@ use deno_core::OpId;
use deno_core::ZeroCopyBuf;
use dlopen::symbor::Library;
use futures::prelude::*;
-use std::path::Path;
+use std::path::PathBuf;
use std::pin::Pin;
use std::rc::Rc;
use std::task::Context;
@@ -41,7 +40,7 @@ pub fn op_open_plugin(
) -> Result<JsonOp, OpError> {
state.check_unstable("Deno.openPlugin");
let args: OpenPluginArgs = serde_json::from_value(args).unwrap();
- let filename = resolve_from_cwd(Path::new(&args.filename))?;
+ let filename = PathBuf::from(&args.filename);
state.check_plugin(&filename)?;