Skip to content

Commit bb61d0d

Browse files
authored
Merge branch 'MCSManager:master' into master
2 parents 0687533 + 8179550 commit bb61d0d

8 files changed

Lines changed: 242 additions & 70 deletions

File tree

daemon/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

daemon/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "mcsmanager-daemon",
3-
"version": "4.15.0",
3+
"version": "4.16.0",
44
"description": "Provides remote control capability for MCSManager to manage processes, scheduled tasks, I/O streams, and more",
55
"scripts": {
66
"dev": "nodemon --watch src --ext ts,js --exec \"npm run build && node --enable-source-maps production/app.js\"",

daemon/src/routers/file_router.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,23 +150,23 @@ routerApp.on("file/status", async (ctx, data) => {
150150
});
151151

152152
// Create a new file
153-
routerApp.on("file/touch", (ctx, data) => {
153+
routerApp.on("file/touch", async (ctx, data) => {
154154
try {
155155
const target = data.target;
156156
const fileManager = getFileManager(data.instanceUuid);
157-
fileManager.newFile(target);
157+
await fileManager.newFile(target);
158158
protocol.response(ctx, true);
159159
} catch (error: any) {
160160
protocol.responseError(ctx, error);
161161
}
162162
});
163163

164164
// Create a directory
165-
routerApp.on("file/mkdir", (ctx, data) => {
165+
routerApp.on("file/mkdir", async (ctx, data) => {
166166
try {
167167
const target = data.target;
168168
const fileManager = getFileManager(data.instanceUuid);
169-
fileManager.mkdir(target);
169+
await fileManager.mkdir(target);
170170
protocol.response(ctx, true);
171171
} catch (error: any) {
172172
protocol.responseError(ctx, error);

daemon/src/service/docker_process_service.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { AsyncTask } from "./async_task_service";
1616
import logger from "./log";
1717
import { NetworkLimitService } from "./network_limit_service";
1818
import InstanceSubsystem from "./system_instance";
19+
import { getLinuxSystemId } from "../tools/system_user";
1920

2021
type PublicPortArray = {
2122
[key: string]: {
@@ -396,6 +397,21 @@ export class SetupDockerContainer extends AsyncTask {
396397
}
397398
}
398399

400+
// Convert Linux host username to UID:GID format for Docker.
401+
const runAs = instance.config.runAs?.trim();
402+
let dockerUser: string | undefined = runAs || undefined;
403+
const shouldResolveHostUser =
404+
runAs && process.platform === "linux" && !runAs.includes(":") && !/^\d+$/.test(runAs);
405+
if (shouldResolveHostUser) {
406+
try {
407+
const { uid, gid } = await getLinuxSystemId(runAs);
408+
dockerUser = `${uid}:${gid}`;
409+
logger.info(`Docker User: ${dockerUser} (converted from ${runAs})`);
410+
} catch (error: any) {
411+
logger.warn(`Failed to get UID/GID for user ${runAs}: ${error.message}`);
412+
}
413+
}
414+
399415
this.container = await docker.createContainer({
400416
Entrypoint: entrypoint,
401417
Cmd: startCmd,
@@ -411,7 +427,7 @@ export class SetupDockerContainer extends AsyncTask {
411427
StdinOnce: false,
412428
ExposedPorts: exposedPorts,
413429
Env: dockerConfig?.env || [],
414-
User: instance.config.runAs || undefined,
430+
User: dockerUser,
415431
Labels: {
416432
...dockerConfig.labels
417433
?.map((label) => {

0 commit comments

Comments
 (0)