diff options
author | pjd <pjd@FreeBSD.org> | 2011-01-24 15:04:15 +0000 |
---|---|---|
committer | pjd <pjd@FreeBSD.org> | 2011-01-24 15:04:15 +0000 |
commit | b9551ad06fa31179aa0660647d8e5c086e14d3a5 (patch) | |
tree | c94a787f7df270529dda90e308b832bb7bcbbe53 /sbin/hastd/control.c | |
parent | 1becfffbbab2786ca68799e6aabbabd97698932a (diff) | |
download | FreeBSD-src-b9551ad06fa31179aa0660647d8e5c086e14d3a5.zip FreeBSD-src-b9551ad06fa31179aa0660647d8e5c086e14d3a5.tar.gz |
Don't open configuration file from worker process. Handle SIGHUP in the
master process only and pass changes to the worker processes over control
socket. This removes access to global namespace in preparation for capsicum
sandboxing.
MFC after: 2 weeks
Diffstat (limited to 'sbin/hastd/control.c')
-rw-r--r-- | sbin/hastd/control.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/sbin/hastd/control.c b/sbin/hastd/control.c index eab7a9e..87fa42a 100644 --- a/sbin/hastd/control.c +++ b/sbin/hastd/control.c @@ -411,7 +411,6 @@ ctrl_thread(void *arg) nv_free(nvin); continue; } - nv_free(nvin); nvout = nv_alloc(); switch (cmd) { case HASTCTL_STATUS: @@ -433,11 +432,23 @@ ctrl_thread(void *arg) nv_add_uint32(nvout, (uint32_t)0, "keepdirty"); nv_add_uint64(nvout, (uint64_t)0, "dirty"); } + nv_add_int16(nvout, 0, "error"); + break; + case HASTCTL_RELOAD: + /* + * When parent receives SIGHUP and discovers that + * something related to us has changes, it sends reload + * message to us. + */ + assert(res->hr_role == HAST_ROLE_PRIMARY); + primary_config_reload(res, nvin); + nv_add_int16(nvout, 0, "error"); break; default: nv_add_int16(nvout, EINVAL, "error"); break; } + nv_free(nvin); if (nv_error(nvout) != 0) { pjdlog_error("Unable to create answer on control message."); nv_free(nvout); |