mirror of
https://github.com/Ylianst/MeshAgent
synced 2025-12-14 23:33:38 +00:00
Updated linux proxy detetion logic
This commit is contained in:
@@ -432,41 +432,7 @@ int MeshAgent_GetSystemProxy(MeshAgentHostContainer *agent, char *buffer, size_t
|
|||||||
})();";
|
})();";
|
||||||
#else
|
#else
|
||||||
// Linux Only
|
// Linux Only
|
||||||
char getProxy[] = "(function getProxies(){\
|
char getProxy[] = "require('proxy-helper').getProxy()";
|
||||||
if(require('fs').existsSync('/etc/environment'))\
|
|
||||||
{\
|
|
||||||
var e = require('fs').readFileSync('/etc/environment').toString();\
|
|
||||||
var tokens = e.split('\\n');\
|
|
||||||
for(var line in tokens)\
|
|
||||||
{\
|
|
||||||
var val = tokens[line].split('=');\
|
|
||||||
if(val.length == 2 && (val[0].trim() == 'http_proxy' || val[0].trim() == 'https_proxy'))\
|
|
||||||
{\
|
|
||||||
return(val[1].split('//')[1]);\
|
|
||||||
}\
|
|
||||||
}\
|
|
||||||
}\
|
|
||||||
if(require('fs').existsSync('/etc/profile.d/proxy_setup'))\
|
|
||||||
{\
|
|
||||||
var child = require('child_process').execFile('/bin/sh', ['sh']);\
|
|
||||||
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });\
|
|
||||||
child.stdin.write('cat /etc/profile.d/proxy_setup | awk \\'{ split($2, tok, \"=\"); if(tok[1]==\"http_proxy\") { print tok[2]; }}\\'\\nexit\\n');\
|
|
||||||
child.waitExit();\
|
|
||||||
child.ret = child.stdout.str.trim().split('\\n')[0].split('//')[1];\
|
|
||||||
if(child.ret != '') { return(child.ret); }\
|
|
||||||
}\
|
|
||||||
if (require('fs').existsSync('/usr/bin/gsettings'))\
|
|
||||||
{\
|
|
||||||
var setting;\
|
|
||||||
var ids = require('user-sessions').loginUids(); \
|
|
||||||
for (var i in ids)\
|
|
||||||
{\
|
|
||||||
setting = require('linux-gnome-helpers').getProxySettings(ids[i]);\
|
|
||||||
if (setting.mode == 'manual') { return(setting.host + ':' + setting.port);} \
|
|
||||||
}\
|
|
||||||
}\
|
|
||||||
throw('No Proxy set');\
|
|
||||||
})();";
|
|
||||||
#endif
|
#endif
|
||||||
// Linux and FreeBSD
|
// Linux and FreeBSD
|
||||||
if (duk_peval_string(agent->meshCoreCtx, getProxy) == 0)
|
if (duk_peval_string(agent->meshCoreCtx, getProxy) == 0)
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -14,6 +14,96 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
function linux_getProxy()
|
||||||
|
{
|
||||||
|
// Check Environment Variabels
|
||||||
|
if(require('fs').existsSync('/etc/environment'))
|
||||||
|
{
|
||||||
|
var e = require('fs').readFileSync('/etc/environment').toString();
|
||||||
|
var tokens = e.split('\\n');
|
||||||
|
for(var line in tokens)
|
||||||
|
{
|
||||||
|
var val = tokens[line].split('=');
|
||||||
|
if(val.length == 2 && (val[0].trim() == 'http_proxy' || val[0].trim() == 'https_proxy'))
|
||||||
|
{
|
||||||
|
return(val[1].split('//')[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check profile.d
|
||||||
|
if(require('fs').existsSync('/etc/profile.d/proxy_setup'))
|
||||||
|
{
|
||||||
|
var child = require('child_process').execFile('/bin/sh', ['sh']);
|
||||||
|
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
|
||||||
|
child.stdin.write("cat /etc/profile.d/proxy_setup | awk '" + '{ split($2, tok, "="); if(tok[1]=="http_proxy") { print tok[2]; }}\'\nexit\n');
|
||||||
|
child.waitExit();
|
||||||
|
child.ret = child.stdout.str.trim().split('\n')[0].split('//')[1];
|
||||||
|
if(child.ret != '') { return(child.ret); }
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check gsettings
|
||||||
|
if (require('fs').existsSync('/usr/bin/gsettings'))
|
||||||
|
{
|
||||||
|
var setting;
|
||||||
|
var ids = require('user-sessions').loginUids();
|
||||||
|
for (var i in ids)
|
||||||
|
{
|
||||||
|
setting = require('linux-gnome-helpers').getProxySettings(ids[i]);
|
||||||
|
if (setting.mode == 'manual') { return(setting.host + ':' + setting.port);}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (require('fs').existsSync('/etc/apt/apt.conf.d/proxy.conf'))
|
||||||
|
{
|
||||||
|
var child = require('child_process').execFile('/bin/sh', ['sh']);
|
||||||
|
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
|
||||||
|
child.stderr.on('data', function (c) { console.log(c.toString()); });
|
||||||
|
child.stdin.write("cat /etc/apt/apt.conf.d/proxy.conf | tr '\\n' '`' | awk -F'`' '{");
|
||||||
|
child.stdin.write('for(n=1;n<NF;++n) { ln=split($n,tok,"::"); split(tok[ln],px,"\\""); split(px[2],x,"://"); if(x[2]!="") { print x[2]; break; } }');
|
||||||
|
child.stdin.write("}'\nexit\n");
|
||||||
|
child.waitExit();
|
||||||
|
if (child.stdout.str.trim() != "") { return (child.stdout.str.trim()); }
|
||||||
|
}
|
||||||
|
if (require('fs').existsSync('/etc/yum.conf'))
|
||||||
|
{
|
||||||
|
var child = require('child_process').execFile('/bin/sh', ['sh']);
|
||||||
|
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
|
||||||
|
child.stderr.on('data', function (c) { console.log(c.toString()); });
|
||||||
|
child.stdin.write('cat /etc/yum.conf | grep "proxy=" | ' + "tr '\\n' '`' | awk -F'`' '{");
|
||||||
|
child.stdin.write('for(n=1;n<NF;++n) { cl=split($n,c,"#"); split($n,px,"://"); if(px[2]!="" && cl==1) { print px[2]; break; } }');
|
||||||
|
child.stdin.write("}'\nexit\n");
|
||||||
|
child.waitExit();
|
||||||
|
if (child.stdout.str.trim() != "") { return (child.stdout.str.trim()); }
|
||||||
|
}
|
||||||
|
if (require('fs').existsSync('/etc/sysconfig/proxy'))
|
||||||
|
{
|
||||||
|
var child = require('child_process').execFile('/bin/sh', ['sh']);
|
||||||
|
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
|
||||||
|
child.stderr.on('data', function (c) { console.log(c.toString()); });
|
||||||
|
child.stdin.write('cat /etc/sysconfig/proxy | grep PROXY_ENABLED= | awk \'{');
|
||||||
|
child.stdin.write('split($0,res,"\\""); if(res[2]=="yes") { print res[2]; }')
|
||||||
|
child.stdin.write("}'\nexit\n");
|
||||||
|
child.waitExit();
|
||||||
|
if (child.stdout.str.trim() != "")
|
||||||
|
{
|
||||||
|
// Enabled
|
||||||
|
child = require('child_process').execFile('/bin/sh', ['sh']);
|
||||||
|
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
|
||||||
|
child.stderr.on('data', function (c) { console.log(c.toString()); });
|
||||||
|
child.stdin.write('cat /etc/sysconfig/proxy | grep _PROXY | ' + "tr '\\n' '`' | awk -F'`' '{");
|
||||||
|
child.stdin.write('for(i=1;i<NF;++i) { if(split($i,r,"HTTP_PROXY=")>1 || split($i,r,"HTTPS_PROXY=")>1) {');
|
||||||
|
child.stdin.write('cl=split($i,c,"#");');
|
||||||
|
child.stdin.write('split($i,px,"\\""); split(px[2],pxx,"://"); if(pxx[2]!="" && cl==1) { print pxx[2]; break; }');
|
||||||
|
child.stdin.write('} }');
|
||||||
|
child.stdin.write("}'\nexit\n");
|
||||||
|
child.waitExit();
|
||||||
|
if (child.stdout.str.trim() != '') { return (child.stdout.str.trim()); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw ('No proxies');
|
||||||
|
}
|
||||||
function posix_proxyCheck(uid, checkAddr)
|
function posix_proxyCheck(uid, checkAddr)
|
||||||
{
|
{
|
||||||
var g;
|
var g;
|
||||||
@@ -104,7 +194,7 @@ switch (process.platform)
|
|||||||
{
|
{
|
||||||
case 'linux':
|
case 'linux':
|
||||||
case 'freebsd':
|
case 'freebsd':
|
||||||
module.exports = { ignoreProxy: posix_proxyCheck };
|
module.exports = { ignoreProxy: posix_proxyCheck, getProxy: linux_getProxy };
|
||||||
break;
|
break;
|
||||||
case 'win32':
|
case 'win32':
|
||||||
module.exports = { ignoreProxy: windows_proxyCheck };
|
module.exports = { ignoreProxy: windows_proxyCheck };
|
||||||
|
|||||||
Reference in New Issue
Block a user