Exemple #1
0
int lc_getrlimit(lua_State *L) {
    int arguments = lua_gettop(L);
    const char *resource = NULL;
    int rid = -1;
    struct rlimit lim;

    if (arguments != 1) {
        lua_pushboolean(L, 0);
        lua_pushstring(L, "invalid-arguments");
        return 2;
    }

    resource = luaL_checkstring(L, 1);
    rid = string2resource(resource);
    if (rid != -1) {
        if (getrlimit(rid, &lim)) {
            lua_pushboolean(L, 0);
            lua_pushstring(L, "getrlimit-failed.");
            return 2;
        }
    } else {
        /* Unsupported resoucrce. Sorry I'm pretty limited by POSIX standard. */
        lua_pushboolean(L, 0);
        lua_pushstring(L, "invalid-resource");
        return 2;
    }
    lua_pushboolean(L, 1);
    lua_pushnumber(L, lim.rlim_cur);
    lua_pushnumber(L, lim.rlim_max);
    return 3;
}
Exemple #2
0
int lc_setrlimit(lua_State *L) {
	struct rlimit lim;
	int arguments = lua_gettop(L);
	int rid = -1;
	if(arguments < 1 || arguments > 3) {
		lua_pushboolean(L, 0);
		lua_pushstring(L, "incorrect-arguments");
		return 2;
	}

	rid = string2resource(luaL_checkstring(L, 1));
	if (rid == -1) {
		lua_pushboolean(L, 0);
		lua_pushstring(L, "invalid-resource");
		return 2;
	}

	/* Fetch current values to use as defaults */
	if (getrlimit(rid, &lim)) {
		lua_pushboolean(L, 0);
		lua_pushstring(L, "getrlimit-failed");
		return 2;
	}

	lim.rlim_cur = arg_to_rlimit(L, 2, lim.rlim_cur);
	lim.rlim_max = arg_to_rlimit(L, 3, lim.rlim_max);

	if (setrlimit(rid, &lim)) {
		lua_pushboolean(L, 0);
		lua_pushstring(L, "setrlimit-failed");
		return 2;
	}
	lua_pushboolean(L, 1);
	return 1;
}
Exemple #3
0
int lc_setrlimit(lua_State *L) {
    int arguments = lua_gettop(L);
    int softlimit = -1;
    int hardlimit = -1;
    const char *resource = NULL;
    int rid = -1;
    if(arguments < 1 || arguments > 3) {
        lua_pushboolean(L, 0);
        lua_pushstring(L, "incorrect-arguments");
    }

    resource = luaL_checkstring(L, 1);
    softlimit = luaL_checkinteger(L, 2);
    hardlimit = luaL_checkinteger(L, 3);

    rid = string2resource(resource);
    if (rid != -1) {
        struct rlimit lim;
        struct rlimit lim_current;

        if (softlimit < 0 || hardlimit < 0) {
            if (getrlimit(rid, &lim_current)) {
                lua_pushboolean(L, 0);
                lua_pushstring(L, "getrlimit-failed");
                return 2;
            }
        }

        if (softlimit < 0) lim.rlim_cur = lim_current.rlim_cur;
        else lim.rlim_cur = softlimit;
        if (hardlimit < 0) lim.rlim_max = lim_current.rlim_max;
        else lim.rlim_max = hardlimit;

        if (setrlimit(rid, &lim)) {
            lua_pushboolean(L, 0);
            lua_pushstring(L, "setrlimit-failed");
            return 2;
        }
    } else {
        /* Unsupported resoucrce. Sorry I'm pretty limited by POSIX standard. */
        lua_pushboolean(L, 0);
        lua_pushstring(L, "invalid-resource");
        return 2;
    }
    lua_pushboolean(L, 1);
    return 1;
}