Skip to content

Commit

Permalink
Disallow running as root without --user-data-dir
Browse files Browse the repository at this point in the history
This commit adds the --user-data-dir argument which allows a custom data dir
for Chromium's user data. This is useful when running as root on Linux since
the root user does not have read or write permissions for the ~/.config/Code
dir.

Part of #3068
  • Loading branch information
Tyriar committed Apr 6, 2016
1 parent 78dcfe1 commit 6456f85
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 1 deletion.
20 changes: 19 additions & 1 deletion resources/linux/bin/code.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,23 @@
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.

ARGS=$@

# If root, ensure that --user-data-dir is specified
if [ "$(id -u)" = "0" ]; then
while test $# -gt 0
do
if [[ $1 == --user-data-dir=* ]]; then
DATA_DIR_SET=1
fi
shift
done
if [ -z $DATA_DIR_SET ]; then
echo "It is recommended to start vscode as a normal user. To run as root, you must specify an alternate user data directory with the --user-data-dir argument." 1>&2
exit 1
fi
fi

if [ ! -L $0 ]; then
# if path is not a symlink, find relatively
VSCODE_PATH="$(dirname $0)/.."
Expand All @@ -15,7 +32,8 @@ else
VSCODE_PATH="/usr/share/@@NAME@@"
fi
fi

ELECTRON="$VSCODE_PATH/@@NAME@@"
CLI="$VSCODE_PATH/resources/app/out/cli.js"
ATOM_SHELL_INTERNAL_RUN_AS_NODE=1 "$ELECTRON" "$CLI" "$@"
ATOM_SHELL_INTERNAL_RUN_AS_NODE=1 "$ELECTRON" "$CLI" $ARGS
exit $?
8 changes: 8 additions & 0 deletions src/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,14 @@ if (process.env.VSCODE_DEV) {
app.setPath('userData', path.join(appData, 'Code-Development'));
}

// Use custom user data dir if specified, required to run as root on Linux
var args = process.argv;
args.forEach(function (arg) {
if (arg.indexOf('--user-data-dir=') === 0) {
app.setPath('userData', arg.split('=')[1]);
}
});

// Mac: when someone drops a file to the not-yet running VSCode, the open-file event fires even before
// the app-ready event. We listen very early for open-file and remember this upon startup as path to open.
global.macOpenFiles = [];
Expand Down
2 changes: 2 additions & 0 deletions src/vs/workbench/electron-main/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ ${ indent }--locale=LOCALE The locale to use (e.g. en-US or zh-TW).
${ indent }-n, --new-window Force a new instance of Code.
${ indent }-r, --reuse-window Force opening a file or folder in the last active
${ indent } window.
${ indent }--user-data-dir=DIR Specifies the directory that user data is kept in,
${ indent } useful when running as root.
${ indent }-v, --version Print version.
${ indent }-w, --wait Wait for the window to be closed before returning.`;
}
Expand Down

0 comments on commit 6456f85

Please sign in to comment.