about summary refs log tree commit diff homepage
path: root/client.c
diff options
context:
space:
mode:
Diffstat (limited to 'client.c')
-rw-r--r--client.c36
1 files changed, 19 insertions, 17 deletions
diff --git a/client.c b/client.c
index dc2c166..be43641 100644
--- a/client.c
+++ b/client.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2018  C. McEnroe <june@causal.agency>
+/* Copyright (C) 2018  June McEnroe <june@causal.agency>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Affero General Public License as published by
@@ -33,10 +33,6 @@
 #include <unistd.h>
 #include <wchar.h>
 
-#ifdef __FreeBSD__
-#include <sys/capsicum.h>
-#endif
-
 #include "torus.h"
 #include "help.h"
 
@@ -524,8 +520,12 @@ static void inputDirection(bool keyCode, wchar_t ch) {
 
 static void inputInsert(bool keyCode, wchar_t ch) {
 	if (keyCode) {
-		inputNormal(keyCode, ch);
-		return;
+		if (ch == KEY_BACKSPACE) {
+			ch = '\b';
+		} else {
+			inputNormal(keyCode, ch);
+			return;
+		}
 	}
 	switch (ch) {
 		break; case Esc: {
@@ -681,6 +681,7 @@ static void readInput(void) {
 }
 
 int main(int argc, char *argv[]) {
+	int error;
 	const char *sockPath = DefaultSockPath;
 	int opt;
 	while (0 < (opt = getopt(argc, argv, "hs:"))) {
@@ -695,6 +696,12 @@ int main(int argc, char *argv[]) {
 	}
 
 	curse();
+
+#ifdef __OpenBSD__
+	error = pledge("stdio tty unix", NULL);
+	if (error) err(EX_OSERR, "pledge");
+#endif
+
 	modeHelp();
 	readInput();
 
@@ -702,18 +709,13 @@ int main(int argc, char *argv[]) {
 	if (client < 0) err(EX_OSERR, "socket");
 
 	struct sockaddr_un addr = { .sun_family = AF_LOCAL };
-	strlcpy(addr.sun_path, sockPath, sizeof(addr.sun_path));
-	int error = connect(client, (struct sockaddr *)&addr, SUN_LEN(&addr));
+	snprintf(addr.sun_path, sizeof(addr.sun_path), "%s", sockPath);
+	error = connect(client, (struct sockaddr *)&addr, SUN_LEN(&addr));
 	if (error) err(EX_NOINPUT, "%s", sockPath);
 
-#ifdef __FreeBSD__
-	error = cap_enter();
-	if (error) err(EX_OSERR, "cap_enter");
-
-	cap_rights_t rights;
-	cap_rights_init(&rights, CAP_READ, CAP_WRITE, CAP_EVENT);
-	error = cap_rights_limit(client, &rights);
-	if (error) err(EX_OSERR, "cap_rights_limit");
+#ifdef __OpenBSD__
+	error = pledge("stdio tty", NULL);
+	if (error) err(EX_OSERR, "pledge");
 #endif
 
 	struct pollfd fds[2] = {