Fix #45: add support for rlimit per service/run/task/inetd/tty

This patch extends the existing rlimit implementation to support setting
limits per service, run/task, inetd, and tty.

Use rlimit in /etc/finit.conf to change the global setting, which is
then inherited to each /etc/finit.d/*.conf.  For each .conf file the
rlimit is reinitialized to the global finit.conf settings.

Also, add `unlimited` keyword, to replace the now deprecated `infinity`
keyword.  The latter is however kept, for compatibility with previous
releases, for the foreseeable future.

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
Joachim Nilsson committed 2017-11-26 16:35:37 +01:00
1 parent 44007c86f2
commit b68c5c1291
12 files changed
+154 -76

No files matched your search

+9 -5
View File
@@ -127,8 +127,9 @@ void tty_sweep(void)
/**
* tty_register - Register a getty on a device
* @line: Configuration, text after initial "tty"
* @mtime: Modification time, to propagate to lower layers
* @line: Configuration, text after initial "tty"
* @rlimit: Limits for this service/task/run/inetd, may be global limits
* @mtime: Modification time, to propagate to lower layers
*
* A Finit tty line can use the internal getty implementation or an
* external one, like the BusyBox getty for instance. This function
@@ -146,7 +147,7 @@ void tty_sweep(void)
* Different getty implementations prefer the TTY device argument in
* different order, so take care to investigate this first.
*/
int tty_register(char *line, struct timeval *mtime)
int tty_register(char *line, struct rlimit rlimit[], struct timeval *mtime)
{
tty_node_t *entry;
int insert = 0, noclear = 0, nowait = 0;
@@ -278,6 +279,9 @@ int tty_register(char *line, struct timeval *mtime)
if (insert)
LIST_INSERT_HEAD(&tty_list, entry, link);
/* Register configured limits */
memcpy(entry->data.rlimit, rlimit, sizeof(entry->data.rlimit));
tty_check(entry, mtime);
_d("TTY %s is %sdirty", dev, entry->dirty ? "" : "NOT ");
@@ -399,9 +403,9 @@ void tty_start(finit_tty_t *tty)
}
if (!tty->cmd)
tty->pid = run_getty(dev, tty->baud, tty->term, tty->noclear, tty->nowait);
tty->pid = run_getty(dev, tty->baud, tty->term, tty->noclear, tty->nowait, tty->rlimit);
else
tty->pid = run_getty2(dev, tty->cmd, tty->args, tty->noclear, tty->nowait);
tty->pid = run_getty2(dev, tty->cmd, tty->args, tty->noclear, tty->nowait, tty->rlimit);
}
void tty_stop(finit_tty_t *tty)