X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fprocd.git;a=blobdiff_plain;f=service%2Finstance.c;h=f2604fef4573c7e8e66fdbb2d8fdc0a35d3c37dd;hp=52f5cf29bb38a19387e9f8f5d90673f97664e079;hb=8ce928994027019c858a523f2a2078736f8e2c5d;hpb=dfd5816bcbef980b11c8a286f8f52a434651c528 diff --git a/service/instance.c b/service/instance.c index 52f5cf2..f2604fe 100644 --- a/service/instance.c +++ b/service/instance.c @@ -79,6 +79,7 @@ static const struct blobmsg_policy instance_attr[__INSTANCE_ATTR_MAX] = { enum { JAIL_ATTR_NAME, + JAIL_ATTR_HOSTNAME, JAIL_ATTR_PROCFS, JAIL_ATTR_SYSFS, JAIL_ATTR_UBUS, @@ -90,6 +91,7 @@ enum { static const struct blobmsg_policy jail_attr[__JAIL_ATTR_MAX] = { [JAIL_ATTR_NAME] = { "name", BLOBMSG_TYPE_STRING }, + [JAIL_ATTR_HOSTNAME] = { "hostname", BLOBMSG_TYPE_STRING }, [JAIL_ATTR_PROCFS] = { "procfs", BLOBMSG_TYPE_BOOL }, [JAIL_ATTR_SYSFS] = { "sysfs", BLOBMSG_TYPE_BOOL }, [JAIL_ATTR_UBUS] = { "ubus", BLOBMSG_TYPE_BOOL }, @@ -120,14 +122,16 @@ static const struct rlimit_name rlimit_names[] = { { "data", RLIMIT_DATA }, { "fsize", RLIMIT_FSIZE }, { "memlock", RLIMIT_MEMLOCK }, - { "msgqueue", RLIMIT_MSGQUEUE }, - { "nice", RLIMIT_NICE }, { "nofile", RLIMIT_NOFILE }, { "nproc", RLIMIT_NPROC }, { "rss", RLIMIT_RSS }, + { "stack", RLIMIT_STACK }, +#ifdef linux + { "nice", RLIMIT_NICE }, { "rtprio", RLIMIT_RTPRIO }, + { "msgqueue", RLIMIT_MSGQUEUE }, { "sigpending", RLIMIT_SIGPENDING }, - { "stack", RLIMIT_STACK }, +#endif { NULL, 0 } }; @@ -185,6 +189,11 @@ jail_run(struct service_instance *in, char **argv) argv[argc++] = jail->name; } + if (jail->hostname) { + argv[argc++] = "-h"; + argv[argc++] = jail->hostname; + } + if (in->seccomp) { argv[argc++] = "-S"; argv[argc++] = in->seccomp; @@ -649,6 +658,10 @@ instance_jail_parse(struct service_instance *in, struct blob_attr *attr) jail->name = blobmsg_get_string(tb[JAIL_ATTR_NAME]); jail->argc += 2; } + if (tb[JAIL_ATTR_HOSTNAME]) { + jail->hostname = blobmsg_get_string(tb[JAIL_ATTR_HOSTNAME]); + jail->argc += 2; + } if (tb[JAIL_ATTR_PROCFS]) { jail->procfs = blobmsg_get_bool(tb[JAIL_ATTR_PROCFS]); jail->argc++; @@ -959,6 +972,8 @@ void instance_dump(struct blob_buf *b, struct service_instance *in, int verbose) void *r = blobmsg_open_table(b, "jail"); if (in->jail.name) blobmsg_add_string(b, "name", in->jail.name); + if (in->jail.hostname) + blobmsg_add_string(b, "hostname", in->jail.hostname); blobmsg_add_u8(b, "procfs", in->jail.procfs); blobmsg_add_u8(b, "sysfs", in->jail.sysfs); blobmsg_add_u8(b, "ubus", in->jail.ubus);