diff --git a/meshcore/agentcore.c b/meshcore/agentcore.c index 0b2277e..32bce3d 100644 --- a/meshcore/agentcore.c +++ b/meshcore/agentcore.c @@ -3263,6 +3263,25 @@ void MeshServer_ProcessCommand(ILibWebClient_StateObject WebStateObject, MeshAge case MeshCommand_CoreOk: // Message from the server indicating our meshcore is ok. No update needed. { printf("Server verified meshcore..."); + + duk_eval_string(agent->meshCoreCtx, "_MSH().setuid;"); + if (duk_is_null_or_undefined(agent->meshCoreCtx, -1) == 0) + { + int uid = atoi(duk_get_string(agent->meshCoreCtx, -1)); + + duk_push_global_object(agent->meshCoreCtx); // [g] + duk_get_prop_string(agent->meshCoreCtx, -1, "process"); // [g][process] + duk_push_array(agent->meshCoreCtx); // [g][process][arr] + duk_push_sprintf(agent->meshCoreCtx, "--setuid=%d", uid); // [g][process][arr][entry] + duk_array_push(agent->meshCoreCtx, -2); // [g][process][arr] + duk_put_prop_string(agent->meshCoreCtx, -2, ILibDuktape_ScriptContainer_Process_ArgArray); // [g][process] + duk_pop_2(agent->meshCoreCtx); +#ifdef _POSIX + ignore_result(setuid((uid_t)uid)); +#endif + } + duk_pop(agent->meshCoreCtx); + if (agent->coreTimeout != NULL) { // Cancel the timeout diff --git a/meshservice/ServiceMain.c b/meshservice/ServiceMain.c index 8293715..520401f 100644 --- a/meshservice/ServiceMain.c +++ b/meshservice/ServiceMain.c @@ -597,6 +597,11 @@ int wmain(int argc, char* wargv[]) integratedJavaScript = ILibString_Copy("require('code-utils').expand({embedded: true});process.exit();", 0); integragedJavaScriptLen = (int)strnlen_s(integratedJavaScript, sizeof(ILibScratchPad)); } + if (argc > 1 && strcmp(argv[1], "-import") == 0 && integragedJavaScriptLen == 0) + { + integratedJavaScript = ILibString_Copy("require('code-utils').shrink();process.exit();", 0); + integragedJavaScriptLen = (int)strnlen_s(integratedJavaScript, sizeof(ILibScratchPad)); + } if (argc > 2 && strcmp(argv[1], "-exec") == 0 && integragedJavaScriptLen == 0) { diff --git a/microscript/ILibDuktape_ScriptContainer.c b/microscript/ILibDuktape_ScriptContainer.c index 864e76b..b206cf0 100644 --- a/microscript/ILibDuktape_ScriptContainer.c +++ b/microscript/ILibDuktape_ScriptContainer.c @@ -107,7 +107,6 @@ char exeJavaScriptGuid[] = "B996015880544A19B7F7E9BE44914C18"; #define ILibDuktape_ScriptContainer_Settings_DB "\xFF_ScriptContainerSettings_DB" #define ILibDuktape_ScriptContainer_Settings_ExitHandler "\xFF_ScriptContainerSettings_ExitHandler" #define ILibDuktape_ScriptContainer_Settings_ExitUser "\xFF_ScriptContainerSettings_ExitUser" -#define ILibDuktape_ScriptContainer_Process_ArgArray "\xFF_argArray" #define ILibDuktape_ScriptContainer_Process_CoreDumpPath "\xFF_coreDumpPath" #define ILibDuktape_ScriptContainer_Process_Restart "\xFF_ScriptContainer_Process_Restart" #define ILibDuktape_ScriptContainer_Process_stdin "\xFF_stdin" diff --git a/microscript/ILibDuktape_ScriptContainer.h b/microscript/ILibDuktape_ScriptContainer.h index 63a3d48..0aa2054 100644 --- a/microscript/ILibDuktape_ScriptContainer.h +++ b/microscript/ILibDuktape_ScriptContainer.h @@ -142,6 +142,7 @@ typedef struct SCRIPT_ENGINE_SETTINGS char **argList; }SCRIPT_ENGINE_SETTINGS; +#define ILibDuktape_ScriptContainer_Process_ArgArray "\xFF_argArray" void ILibDuktape_ScriptContainer_CheckEmbedded(char **script, int *scriptLen); void ILibDuktape_ScriptContainer_CheckEmbeddedEx(char *exePath, char **script, int *scriptLen);