A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/nodejs/node/commit/d6ea36ad6c below:

implicit allow-fs-read to app entrypoint · nodejs/node@d6ea36a · GitHub

File tree Expand file treeCollapse file tree 8 files changed

+110

-13

lines changed

Filter options

Expand file treeCollapse file tree 8 files changed

+110

-13

lines changed Original file line number Diff line number Diff line change

@@ -194,6 +194,9 @@ process.

194 194

<!-- YAML

195 195

added: v20.0.0

196 196

changes:

197 +

- version: REPLACEME

198 +

pr-url: https://github.com/nodejs/node/pull/58579

199 +

description: Entrypoints of your application are allowed to be read implicitly.

197 200

- version:

198 201

- v23.5.0

199 202

- v22.13.0

@@ -215,23 +218,20 @@ The valid arguments for the `--allow-fs-read` flag are:

215 218 216 219

Examples can be found in the [File System Permissions][] documentation.

217 220 218 -

The initializer module also needs to be allowed. Consider the following example:

221 +

The initializer module and custom `--require` modules has a implicit

222 +

read permission.

219 223 220 224

```console

221 -

$ node --permission index.js

222 - 223 -

Error: Access to this API has been restricted

224 -

at node:internal/main/run_main_module:23:47 {

225 -

code: 'ERR_ACCESS_DENIED',

226 -

permission: 'FileSystemRead',

227 -

resource: '/Users/rafaelgss/repos/os/node/index.js'

228 -

}

225 +

$ node --permission -r custom-require.js -r custom-require-2.js index.js

229 226

```

230 227 231 -

The process needs to have access to the `index.js` module:

228 +

* The `custom-require.js`, `custom-require-2.js`, and `index.js` will be

229 +

by default in the allowed read list.

232 230 233 -

```bash

234 -

node --permission --allow-fs-read=/path/to/index.js index.js

231 +

```js

232 +

process.has('fs.read', 'index.js'); // true

233 +

process.has('fs.read', 'custom-require.js'); // true

234 +

process.has('fs.read', 'custom-require-2.js'); // true

235 235

```

236 236 237 237

### `--allow-fs-write`

Original file line number Diff line number Diff line change

@@ -104,6 +104,23 @@ $ node --permission --allow-fs-read=* --allow-fs-write=* index.js

104 104

Hello world!

105 105

```

106 106 107 +

By default the entrypoints of your application are included

108 +

in the allowed file system read list. For example:

109 + 110 +

```console

111 +

$ node --permission index.js

112 +

```

113 + 114 +

* `index.js` will be included in the allowed file system read list

115 + 116 +

```console

117 +

$ node -r /path/to/custom-require.js --permission index.js.

118 +

```

119 + 120 +

* `/path/to/custom-require.js` will be included in the allowed file system read

121 +

list.

122 +

* `index.js` will be included in the allowed file system read list.

123 + 107 124

The valid arguments for both flags are:

108 125 109 126

* `*` - To allow all `FileSystemRead` or `FileSystemWrite` operations,

Original file line number Diff line number Diff line change

@@ -928,6 +928,25 @@ Environment::Environment(IsolateData* isolate_data,

928 928

permission()->Apply(this, {"*"}, permission::PermissionScope::kWASI);

929 929

}

930 930 931 +

// Implicit allow entrypoint to kFileSystemRead

932 +

if (!options_->has_eval_string && !options_->force_repl) {

933 +

std::string first_argv;

934 +

if (argv_.size() > 1) {

935 +

first_argv = argv_[1];

936 +

}

937 + 938 +

// Also implicit allow preloaded modules to kFileSystemRead

939 +

if (!options_->preload_cjs_modules.empty()) {

940 +

for (const std::string& mod : options_->preload_cjs_modules) {

941 +

options_->allow_fs_read.push_back(mod);

942 +

}

943 +

}

944 + 945 +

if (first_argv != "inspect") {

946 +

options_->allow_fs_read.push_back(first_argv);

947 +

}

948 +

}

949 + 931 950

if (!options_->allow_fs_read.empty()) {

932 951

permission()->Apply(this,

933 952

options_->allow_fs_read,

Original file line number Diff line number Diff line change

@@ -0,0 +1,15 @@

1 +

const fs = require('node:fs')

2 +

const path = require('node:path')

3 +

const assert = require('node:assert');

4 + 5 +

{

6 +

fs.readFileSync(__filename);

7 +

console.log('Read its own contents') // Should not throw

8 +

}

9 +

{

10 +

const simpleLoaderPath = path.join(__dirname, 'simple-loader.js');

11 +

fs.readFile(simpleLoaderPath, (err) => {

12 +

assert.ok(err.code, 'ERR_ACCESS_DENIED');

13 +

assert.ok(err.permission, 'FileSystemRead');

14 +

}); // Should throw ERR_ACCESS_DENIED

15 +

}

Original file line number Diff line number Diff line change

@@ -0,0 +1 @@

1 +

console.log('Hello world')

Original file line number Diff line number Diff line change

@@ -0,0 +1,3 @@

1 +

// Simulate a regular loading without fs operations

2 +

// but with access to Node core modules

3 +

require('node:fs')

Original file line number Diff line number Diff line change

@@ -0,0 +1,38 @@

1 +

// Flags: --permission --allow-fs-read=* --allow-fs-write=* --allow-child-process

2 +

'use strict';

3 + 4 +

const common = require('../common');

5 +

const { isMainThread } = require('worker_threads');

6 + 7 +

if (!isMainThread) {

8 +

common.skip('This test only works on a main thread');

9 +

}

10 + 11 +

if (!common.hasCrypto) {

12 +

common.skip('no crypto');

13 +

}

14 + 15 +

const assert = require('assert');

16 +

const fixtures = require('../common/fixtures');

17 +

const { spawnSync } = require('child_process');

18 + 19 +

const file = fixtures.path('permission', 'hello-world.js');

20 +

const simpleLoader = fixtures.path('permission', 'simple-loader.js');

21 +

const fsReadLoader = fixtures.path('permission', 'fs-read-loader.js');

22 + 23 +

[

24 +

'',

25 +

simpleLoader,

26 +

fsReadLoader,

27 +

].forEach((arg0) => {

28 +

const { status, stderr } = spawnSync(

29 +

process.execPath,

30 +

[

31 +

arg0 !== '' ? '-r' : '',

32 +

arg0,

33 +

'--permission',

34 +

file,

35 +

],

36 +

);

37 +

assert.strictEqual(status, 0, `${arg0} Error: ${stderr.toString()}`);

38 +

});

Original file line number Diff line number Diff line change

@@ -32,7 +32,11 @@ const commonPath = path.join(__filename, '../../common');

32 32

const { status, stderr } = spawnSync(

33 33

process.execPath,

34 34

[

35 -

'--permission', `--allow-fs-read=${file}`, `--allow-fs-read=${commonPathWildcard}`, file,

35 +

'--permission',

36 +

// Do not uncomment this line

37 +

// `--allow-fs-read=${file}`,

38 +

`--allow-fs-read=${commonPathWildcard}`,

39 +

file,

36 40

],

37 41

{

38 42

env: {

You can’t perform that action at this time.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4