1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Fix check for user exec command

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2021-08-23 16:21:26 -04:00
parent 9d9f9c0072
commit f1fb1e2537
4 changed files with 21 additions and 16 deletions

View File

@ -193,7 +193,6 @@
"byline": "^5.0.0", "byline": "^5.0.0",
"chalk": "^4.1.0", "chalk": "^4.1.0",
"chokidar": "^3.4.3", "chokidar": "^3.4.3",
"command-exists": "1.2.9",
"conf": "^7.0.1", "conf": "^7.0.1",
"crypto-js": "^4.1.1", "crypto-js": "^4.1.1",
"electron-devtools-installer": "^3.2.0", "electron-devtools-installer": "^3.2.0",

View File

@ -19,12 +19,14 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ */
import path from "path";
export class ExecValidationNotFoundError extends Error { export class ExecValidationNotFoundError extends Error {
constructor(execPath: string, isAbsolute: boolean) { constructor(execPath: string) {
super(`User Exec command "${execPath}" not found on host.`); super(`User Exec command "${execPath}" not found on host.`);
let message = `User Exec command "${execPath}" not found on host.`; let message = `User Exec command "${execPath}" not found on host.`;
if (!isAbsolute) { if (!path.isAbsolute(execPath)) {
message += ` Please ensure binary is found in PATH or use absolute path to binary in Kubeconfig`; message += ` Please ensure binary is found in PATH or use absolute path to binary in Kubeconfig`;
} }
this.message = message; this.message = message;

View File

@ -25,11 +25,11 @@ import path from "path";
import os from "os"; import os from "os";
import yaml from "js-yaml"; import yaml from "js-yaml";
import logger from "../main/logger"; import logger from "../main/logger";
import commandExists from "command-exists";
import { ExecValidationNotFoundError } from "./custom-errors"; import { ExecValidationNotFoundError } from "./custom-errors";
import { Cluster, Context, newClusters, newContexts, newUsers, User } from "@kubernetes/client-node/dist/config_types"; import { Cluster, Context, newClusters, newContexts, newUsers, User } from "@kubernetes/client-node/dist/config_types";
import { resolvePath } from "./utils"; import { resolvePath } from "./utils";
import Joi from "joi"; import Joi from "joi";
import { execFileSync } from "child_process";
export type KubeConfigValidationOpts = { export type KubeConfigValidationOpts = {
validateCluster?: boolean; validateCluster?: boolean;
@ -295,13 +295,22 @@ export function validateKubeConfig(config: KubeConfig, contextName: string, vali
// Validate exec command if present // Validate exec command if present
if (validateExec && user?.exec) { if (validateExec && user?.exec) {
const execCommand = user.exec["command"]; try {
// check if the command is absolute or not execFileSync(user.exec.command, { timeout: 1 });
const isAbsolute = path.isAbsolute(execCommand);
// validate the exec struct in the user object, start with the command field // If this doesn't throw an error it also means that it has found the executable.
if (!commandExists.sync(execCommand)) { } catch (error) {
return new ExecValidationNotFoundError(execCommand, isAbsolute); switch (error?.code) {
case "ETIMEDOUT":
// ignore this error code. It means that the exec can be found.
break;
case "ENOENT":
case "EACCES":
case "EPERM":
return new ExecValidationNotFoundError(user.exec.command);
default:
return error;
}
} }
} }

View File

@ -4066,11 +4066,6 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:
dependencies: dependencies:
delayed-stream "~1.0.0" delayed-stream "~1.0.0"
command-exists@1.2.9:
version "1.2.9"
resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69"
integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==
commander@2.9.0: commander@2.9.0:
version "2.9.0" version "2.9.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"