MOON
Server: Apache
System: Linux e2e-78-16.ssdcloudindia.net 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64
User: imensosw (1005)
PHP: 7.4.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //opt/bitninja-dispatcher/node_modules/daemonize2/lib/wrapper.js
// Copyright (c) 2012 Kuba Niegowski
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

"use strict";

var constants = require("./constants");


// wrapper is spawned with no stdio attached so redirect exceptions via ipc
var exceptionHandler = null;
process.on("uncaughtException", exceptionHandler = function(err) {
    process.send({type: "error", error: err.stack || err.message});
    process.disconnect();
    process.exit(1);
});

// now sit and wait for options via ipc
process.on("message", function(message) {

    if (message.type == "init") {
        init(message.options);
    }
});

var init = function(options) {

    // validate options
    if (!options.main) {
        process.exit(constants.exitCodes.argMainRequired[0]);
    }

    // check if main is resolvable
    try {
        require.resolve(options.main);
    }
    catch (ex) {
        process.exit(constants.exitCodes.mainNotFound[0]);
    }

    // rename process
    if (options.name)
        process.title = options.name;

    // change the file mode mask
    process.umask(options.umask);

    // change working directory
    try {
        process.chdir(options.cwd || "/");
    }
    catch (ex) {
        process.exit(constants.exitCodes.chdirFailed[0]);
    }

    // change group id
    if (options.group) {
        try {
            process.setgid(options.group);
        }
        catch (ex) {
            process.exit(ex.code == "EPERM"
                            ? constants.exitCodes.setgidNoPriv[0]
                            : constants.exitCodes.setgidFailed[0]
                        );
        }
    }

    // change user id
    if (options.user) {
        try {
            process.setuid(options.user);
        }
        catch (ex) {
            process.exit(ex.code == "EPERM"
                            ? constants.exitCodes.setuidNoPriv[0]
                            : constants.exitCodes.setuidFailed[0]
                        );
        }
    }

    // make wrapper transparent
    process.argv = [
        process.argv[0],
        options.main
    ].concat(process.argv.slice(2));

    // run main module
    var setup = require(options.main);

    // pass options to exported function
    if (typeof setup == "function") setup(options);

    // stop monitoring uncaughtException
    process.removeListener("uncaughtException", exceptionHandler);

    // close IPC to parent process
    process.disconnect();

};