summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--bounce.h6
-rw-r--r--client.c4
2 files changed, 6 insertions, 4 deletions
diff --git a/bounce.h b/bounce.h
index 434a1f8..129dd7b 100644
--- a/bounce.h
+++ b/bounce.h
@@ -45,9 +45,9 @@ bool verbose;
 
 enum { ParamCap = 15 };
 struct Message {
-	const char *origin;
-	const char *cmd;
-	const char *params[ParamCap];
+	char *origin;
+	char *cmd;
+	char *params[ParamCap];
 };
 
 static inline struct Message parse(char *line) {
diff --git a/client.c b/client.c
index 35faa4b..79f55ae 100644
--- a/client.c
+++ b/client.c
@@ -23,6 +23,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <strings.h>
 #include <sysexits.h>
 #include <tls.h>
 #include <unistd.h>
@@ -127,7 +128,7 @@ static void handleUser(struct Client *client, struct Message *msg) {
 static void handlePass(struct Client *client, struct Message *msg) {
 	if (!clientPass) return;
 	if (!msg->params[0]) {
-		passRequired(client);
+		client->error = true;
 		return;
 	}
 	if (!strcmp(crypt(msg->params[0], clientPass), clientPass)) {
@@ -136,6 +137,7 @@ static void handlePass(struct Client *client, struct Message *msg) {
 	} else {
 		passRequired(client);
 	}
+	explicit_bzero(msg->params[0], strlen(msg->params[0]));
 }
 
 static void handleCap(struct Client *client, struct Message *msg) {