summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2019-08-28 13:01:28 -0400
committerJune McEnroe <june@causal.agency>2019-08-28 13:01:28 -0400
commitd0179695c4f2f14934c525c4881da7fff9459af5 (patch)
tree0ca11a1ef01387b23812ac68cb222b33d9f5e8e8
parentCast %lc parameter to wint_t (diff)
downloadsrc-d0179695c4f2f14934c525c4881da7fff9459af5.tar.gz
src-d0179695c4f2f14934c525c4881da7fff9459af5.zip
Factor out cap_rights_limit error handling
Diffstat (limited to '')
-rw-r--r--bin/relay.c27
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);