blob: fa88111c0212c60595b60ea1c00fb0ebb8904639 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
// @flow
import fs from 'fs';
export function canTrustRpcAddressFile(path: string): boolean {
const platform = process.platform;
switch (platform) {
case 'win32':
return isOwnedByLocalSystem(path);
case 'darwin':
case 'linux':
return isOwnedAndOnlyWritableByRoot(path);
default:
throw new Error(`Unknown platform: ${platform}`);
}
}
function isOwnedAndOnlyWritableByRoot(path: string): boolean {
const stat = fs.statSync(path);
const isOwnedByRoot = stat.uid === 0;
const isOnlyWritableByOwner = (stat.mode & parseInt('022', 8)) === 0;
return isOwnedByRoot && isOnlyWritableByOwner;
}
function isOwnedByLocalSystem(path: string): boolean {
// $FlowFixMe: this module is only available on Windows
const winsec = require('windows-security');
const ownerSid = winsec.getFileOwnerSid(path, null);
const isWellKnownSid = winsec.isWellKnownSid(
ownerSid,
winsec.WellKnownSid.BuiltinAdministratorsSid,
);
return isWellKnownSid;
}
|