diff options
author | June McEnroe <june@causal.agency> | 2019-08-28 13:01:28 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2019-08-28 13:01:28 -0400 |
commit | d0179695c4f2f14934c525c4881da7fff9459af5 (patch) | |
tree | 0ca11a1ef01387b23812ac68cb222b33d9f5e8e8 /bin | |
parent | Cast %lc parameter to wint_t (diff) | |
download | src-d0179695c4f2f14934c525c4881da7fff9459af5.tar.gz src-d0179695c4f2f14934c525c4881da7fff9459af5.zip |
Factor out cap_rights_limit error handling
Diffstat (limited to 'bin')
-rw-r--r-- | bin/relay.c | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/bin/relay.c b/bin/relay.c index 2ffd344b..d54f7245 100644 --- a/bin/relay.c +++ b/bin/relay.c @@ -87,6 +87,13 @@ static void clientHandle(struct tls *client, const char *chan, char *line) { } } +#ifdef __FreeBSD__ +static void limit(int fd, const cap_rights_t *rights) { + int error = cap_rights_limit(fd, rights); + if (error) err(EX_OSERR, "cap_rights_limit"); +} +#endif + int main(int argc, char *argv[]) { int error; @@ -140,25 +147,19 @@ int main(int argc, char *argv[]) { if (error) errx(EX_PROTOCOL, "tls_connect: %s", tls_error(client)); #ifdef __FreeBSD__ - cap_rights_t rights; - error = cap_enter(); if (error) err(EX_OSERR, "cap_enter"); - cap_rights_init(&rights, CAP_READ, CAP_EVENT); - error = cap_rights_limit(STDIN_FILENO, &rights); - if (error) err(EX_OSERR, "cap_rights_limit"); - + cap_rights_t rights; cap_rights_init(&rights, CAP_WRITE); - error = cap_rights_limit(STDOUT_FILENO, &rights); - if (error) err(EX_OSERR, "cap_rights_limit"); + limit(STDOUT_FILENO, &rights); + limit(STDERR_FILENO, &rights); - error = cap_rights_limit(STDERR_FILENO, &rights); - if (error) err(EX_OSERR, "cap_rights_limit"); + cap_rights_init(&rights, CAP_EVENT, CAP_READ); + limit(STDIN_FILENO, &rights); - cap_rights_init(&rights, CAP_READ, CAP_WRITE, CAP_EVENT); - error = cap_rights_limit(sock, &rights); - if (error) err(EX_OSERR, "cap_rights_limit"); + cap_rights_set(&rights, CAP_WRITE); + limit(sock, &rights); #endif clientFormat(client, "NICK :%s\r\nUSER %s 0 * :%s\r\n", nick, nick, nick); |