From c320caec99abacb41e87b5d353e887cf54d50ea5 Mon Sep 17 00:00:00 2001 From: Krishna Acondy Date: Mon, 14 Jun 2021 09:10:26 +0100 Subject: [PATCH 1/2] fix(sas9): force webout output when executing arbitrary code on SAS9 --- src/SAS9ApiClient.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/SAS9ApiClient.ts b/src/SAS9ApiClient.ts index cd76e91..83c4c7f 100644 --- a/src/SAS9ApiClient.ts +++ b/src/SAS9ApiClient.ts @@ -45,7 +45,9 @@ export class SAS9ApiClient { ) { await this.requestClient.login(userName, password, this.jobsPath) - const formData = generateFileUploadForm(linesOfCode.join('\n')) + // This piece of code forces a webout to prevent Stored Process Errors. + const forceOutputCode = ['data _null_;', 'file _webout;', `put 'Executed sasjs run';`, 'run;'] + const formData = generateFileUploadForm([...linesOfCode, ...forceOutputCode].join('\n')) const codeInjectorPath = `/User Folders/${userName}/My Folder/sasjs/runner` const contentType = From d50f5a030a7e3ea2e3d6ec7cfe9c873768505f9e Mon Sep 17 00:00:00 2001 From: Krishna Acondy Date: Mon, 14 Jun 2021 09:12:11 +0100 Subject: [PATCH 2/2] chore(lint): fix formatting --- src/SAS9ApiClient.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/SAS9ApiClient.ts b/src/SAS9ApiClient.ts index 83c4c7f..fb05c23 100644 --- a/src/SAS9ApiClient.ts +++ b/src/SAS9ApiClient.ts @@ -46,8 +46,15 @@ export class SAS9ApiClient { await this.requestClient.login(userName, password, this.jobsPath) // This piece of code forces a webout to prevent Stored Process Errors. - const forceOutputCode = ['data _null_;', 'file _webout;', `put 'Executed sasjs run';`, 'run;'] - const formData = generateFileUploadForm([...linesOfCode, ...forceOutputCode].join('\n')) + const forceOutputCode = [ + 'data _null_;', + 'file _webout;', + `put 'Executed sasjs run';`, + 'run;' + ] + const formData = generateFileUploadForm( + [...linesOfCode, ...forceOutputCode].join('\n') + ) const codeInjectorPath = `/User Folders/${userName}/My Folder/sasjs/runner` const contentType =