GithubHelp home page GithubHelp logo

Direct disk/filesystem access about extism HOT 8 OPEN

Simonl9l avatar Simonl9l commented on May 31, 2024
Direct disk/filesystem access

from extism.

Comments (8)

henriklundgren avatar henriklundgren commented on May 31, 2024 2

@nilslice Thanks, works now!

from extism.

mhmd-azeez avatar mhmd-azeez commented on May 31, 2024 1

@Simonl9l you can give the plugins access to the file system, you just have to specify it in the manifest explicitly.

Docs: https://extism.github.io/dotnet-sdk/api/Extism.Sdk.Manifest.html#Extism_Sdk_Manifest_AllowedPaths

Example: https://github.com/extism/dotnet-sdk/blob/main/test/Extism.Sdk/BasicTests.cs#L87

from extism.

nilslice avatar nilslice commented on May 31, 2024 1

@henriklundgren - since you’re using your own host function read, the Manifest configuration does not apply. In the way you have it, your host function goes around the protections / limitations defined in the Manifest - which is fine, just be sure you are ok with a plugin having access to any path on the host.

Using the Manifest, you can map the paths like you have, but compile using —-target wasm32-wasi, and then you can use normal std library code to read from the /Target path which through WASI would map to the hosts /home/NAME/Target path.

from extism.

Simonl9l avatar Simonl9l commented on May 31, 2024

thanks for the link to the docs, for some reason they are not obviously visible from elsewhere!

from extism.

Simonl9l avatar Simonl9l commented on May 31, 2024

Ah - please can you help interpret the difference betwen source and destination for Allowed Paths - https://extism.github.io/dotnet-sdk/api/Extism.Sdk.Manifest.html#Extism_Sdk_Manifest_AllowedPaths

if relative is that relative to the manifest file, or the host process?

from extism.

mhmd-azeez avatar mhmd-azeez commented on May 31, 2024

@Simonl9l source is the path on the host side. For example, lets say you want to create a folder for each plugin like so:
D:/plugins/123/ and then destination is the path that will be available for the plugin. For example /mnt (WASI has a UNIX-style file system)

So the plugin thinks all of the files in D:/plugins/123 are in the /mnt folder. Basically you're creating a virtual file system for the plugin. This is the folder the test reads from: https://github.com/extism/dotnet-sdk/tree/main/test/Extism.Sdk/data

if relative is that relative to the manifest file, or the host process?

The source path is relative to the host process (but you can provide an absolute path too)

from extism.

henriklundgren avatar henriklundgren commented on May 31, 2024

I am struggling to get allowed_paths to work but without success.

If I inline the path in the host_fn it works as expected.

I am using Rust (v1.78) both as host language and plugin language.

I tried both absolute path and relative (still unclear what it is relative to).

Any help appreciated, thanks.

hostfn!(read(path: String) {
	fs::read_dir(path);
});

Manifest {
	wasm: vec![url],
	allowed_paths: Some(BTreeMap::from([
		(
			// PathBufs
			"/home/NAME/Target",
			"/Target"
		)
	])),
}

// ---- Plugin ----

#[host_fn]
extern "ExtismHost" {
	fn read(path: String);
}

#[plugin_fn]
fn get(path: String) {
	unsafe { read(path) }
}

Edit: added code

from extism.

nilslice avatar nilslice commented on May 31, 2024

@henriklundgren, glad to hear it! we could improve the docs on this, sorry for the confusion.

from extism.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.