Переглянути джерело

Fixed Elevated Bugs

production
pb 2 роки тому
джерело
коміт
975b0fd6ac
3 змінених файлів з 37 додано та 21 видалено
  1. 17
    11
      index.js
  2. 11
    8
      lin_verse.js
  3. 9
    2
      win_verse.js

+ 17
- 11
index.js Переглянути файл

@@ -404,8 +404,8 @@ var getPullTask = (repodef, branch, repoowner, errHandler, elevatedBatch, regula

if (exists) {
var branchprint = branch ? ' branch :' + branch : '';
console.log('pulling ' + instanceroot + '/' + repo + branchprint )
var task = ()=>{
console.log('pulling ' + instanceroot + '/' + repo + branchprint )
return nodeShellExec.apply(null, getPullCmd(repo, branch)).then(() => {
return true;
})
@@ -413,6 +413,7 @@ var getPullTask = (repodef, branch, repoowner, errHandler, elevatedBatch, regula
initTask(task)

if(repodef.requiresElevation) {
if(elevatedBatch.length === 1) { initTask(elevatedBatch[0]) } // PB : TDOO -- Make sure first task also has run context. May need to be moved to win_verse
elevatedBatch.push(shell_verse.getElevatedTask( task ));
return elevatedBatch[elevatedBatch.length-1]
}
@@ -2373,7 +2374,7 @@ var elxr = {
// shell_verse.getElevatedTask( t1 )
var eBatch = []
def.elevated.map((def) => getPullTask(def, null, null, null, eBatch))
return any(shell_verse.runElevatedBatch(eBatch)).then(() => {
return shell_verse.runElevatedBatch(eBatch).then(() => {
return true;
}).catch((e) => {
console.error(e)
@@ -2425,7 +2426,11 @@ function elxrworker() {
// --runas
if (processedArgs.runas) {
// Weve been asked to run in priviledged mode. Check if we already are privileged.
return __runcmd('runas')
// return __runcmd('runas')
// we no longer have a runas function. This has been moved to shellverse.requestElevation...
// Each task has knowledge of requiring elevation and will handle elevation requests as needed. Preferably the task will participate in a batch and queue itself.
//
return __runcmd(processedArgs.label || processedArgs._[0] || 'undefined');
}
else return __runcmd(processedArgs.label || processedArgs._[0] || 'undefined');
}
@@ -3995,7 +4000,7 @@ var maintask = () => {
return prerequisites.git.verifyAndInstall().then(()=>{
var e = { message : 'verifyAndInstall', success : true}
var inittasks = []
var commantask = () => { preworkerconfig(); return elxrworker(true) }
var commontask = () => { preworkerconfig(); return elxrworker(true) }
if(!detection_state.localInstanceDetected) {
var t1 = ()=>{ return createInstance(selectedinstance) };
t1.statuslog = statuslog
@@ -4007,10 +4012,10 @@ var maintask = () => {
var specifictask = shell_verse.getNonElevatedTask(t2)
}
inittasks.push( specifictask().catch((err) => {
e = err;
console.error('Chosen cofiguraton failed or not found. Fix config and rerun or chose another.')
console.error(err)
}).then( commantask )
e = err;
console.error('Chosen cofiguraton failed or not found. Fix config and rerun or chose another.')
console.error(err)
}).then( commontask )
// .finally(()=>{
// fs.writeFileSync('run.log', ', ' + JSON.stringify({ error: e.message }), { 'flag': 'a+' })
// if(!e.success) fs.writeFileSync('run.done', 'error');
@@ -4092,13 +4097,14 @@ function generateDependencies(){
// PB : TODO -- Convert all the cli args back to string.
// __filename will sure we are launhed using the same entry point.
var cargs = (processedArgs.debug ? '--inspect-brk=9228' : '') + ' ${__filename.replace(/\\/g, '\\\\')} ' + processedArgs._.join(' ') + ' ' + namedArgs.join(' ');
// alert(cargs)
var shell = new ActiveXObject('shell.application');
// alert('launching node privilged. ' + processedArgs['nodepath'])
// shell.ShellExecute('where', 'node', '', '', 10);
// shell.ShellExecute('cmd.exe', '/k where node', '', '', 10);
// shell.ShellExecute('cmd.exe', '/k notepad.exe', '', 'runas', 1);
// shell.ShellExecute('cmd.exe ', '/k node "' + cargs + '"', '', 'runas', 1);
// shell.ShellExecute('cmd.exe ', '/k node ', '', 'runas', 1);
// shell.ShellExecute('cmd.exe ', '/k node ' + cargs + '', '', 'runas', 1);
shell.ShellExecute('node', cargs, '', 'runas', 1);
// alert('/k node ' + cargs + '')
// shell.ShellExecute(processedArgs['nodepath'], cargs, '', 'runas', 1);
var fso = new ActiveXObject('Scripting.FileSystemObject');

+ 11
- 8
lin_verse.js Переглянути файл

@@ -1,3 +1,4 @@
const { any } = require('bbhverse');
const fs = require('fs')

var cli = require('./cliverse')
@@ -40,26 +41,28 @@ var shell_verse = {
}

, elevatedRunner( taskToRun ){
// PB : TODO -- Should be called only when we are in an elevated shell that was already requested from an unelevated shell with a batch of tasks.
try {
// PB : We do not need IPC in linux. Until a real sudo elevation is required eveything works in non elevated mode...
var __runasresult = null;
return taskToRun().then((r)=>{
// PB : TODO -- Every elevation should have its own messaging file. Async writes from multiple processes are a problem here...
fs.writeFileSync('run.log', ', ' + JSON.stringify( { info : taskToRun.info, success: true }), { 'flag': 'a+' })
fs.writeFileSync('run.done', 'success') // PB : TODO -- This should be done conditionally if we are running inproc.
// fs.writeFileSync('run.log', ', ' + JSON.stringify( { info : taskToRun.info, success: true }), { 'flag': 'a+' })
// fs.writeFileSync('run.done', 'success') // PB : TODO -- This should be done conditionally if we are running inproc.
return __runasresult = r;
})
.catch((e) => {
fs.writeFileSync('run.log', ', ' + JSON.stringify(e), { 'flag': 'a+' })
fs.writeFileSync('run.done', 'failure')
// fs.writeFileSync('run.log', ', ' + JSON.stringify(e), { 'flag': 'a+' })
// fs.writeFileSync('run.done', 'failure')
console.error(e)
})
.finally(() => {
if(__runasresult && !__runasresult.skipped) fs.unlinkSync('run.done')
// if(__runasresult && !__runasresult.skipped) fs.unlinkSync('run.done')
})
}
catch (e) {
console.error('Error Invalid command : ' + e)
fs.writeFileSync('run.done', 'error')
// fs.writeFileSync('run.done', 'error')
}
finally {
}
@@ -87,14 +90,14 @@ var shell_verse = {
, runElevatedBatch( batchToRun ){
// In windows we don't need to run each task. We hand over to another shell which in elevated state rebuilds the whole batch and runs.
// Irrespective of the batch we just call runElevated once.
return batchToRun.map( t => runElevated )
return any(batchToRun.map( t => runElevated ))
}

, getNonElevatedTask : function( taskToRun ){ return ()=>{ return shell_verse.runNonElevated(taskToRun) } }
, runNonElevated : ( taskToRun ) => {
// Let shell_verse decide whether to Elevate Out of Proc or In Proc
if(__isElevated) {
return Promise.resolve( new Error('Cannot Run Task in Elevated Mode.') )
return Promise.resolve( 'Skipping regular task in elevated shell.' ) // Regular tasks unless marked as common tasks should not run in elevated shell...
}
else {
// taskToRun by default is the launched command and args.

+ 9
- 2
win_verse.js Переглянути файл

@@ -1,3 +1,4 @@
const { any } = require('bbhverse');
const fs = require('fs')

var cli = require('./cliverse')
@@ -13,6 +14,7 @@ var shell_verse = {
}

, elevatedRunner( taskToRun ){
// PB : TODO -- Should be called only when we are in an elevated shell that was already requested from an unelevated shell with a batch of tasks.
try {
var __runasresult = null;
return taskToRun().then((r)=>{
@@ -60,14 +62,19 @@ var shell_verse = {
, runElevatedBatch( batchToRun ){
// In windows we don't need to run each task. We hand over to another shell which in elevated state rebuilds the whole batch and runs.
// Irrespective of the batch we just call runElevated once.
return [runElevated(batchToRun[0])]
if (__isElevated) {
return any(batchToRun);
}
else {
return this.runElevated(batchToRun[0])
}
}

, getNonElevatedTask : function( taskToRun ){ return ()=>{ return shell_verse.runNonElevated(taskToRun) } }
, runNonElevated : ( taskToRun ) => {
// Let shell_verse decide whether to Elevate Out of Proc or In Proc
if(__isElevated) {
return Promise.resolve( new Error('Cannot Run Task in Elevated Mode.') )
return Promise.resolve( 'Skipping regular task in elevated shell.' ) // Regular tasks unless marked as common tasks should not run in elevated shell...
}
else {
// taskToRun by default is the launched command and args.

Завантаження…
Відмінити
Зберегти