summary refs log tree commit diff
diff options
context:
space:
mode:
authorMichael Forney <mforney@mforney.org>2019-11-20 01:13:29 -0800
committerJune McEnroe <june@causal.agency>2019-11-21 16:14:10 -0500
commit113a33bdf883602313fa33fd323fe1af80b1c620 (patch)
tree5a915d60b242406a78693fe728c792cec53e3700
parentAvoid a couple VLAs with constant size (diff)
downloadpounce-113a33bdf883602313fa33fd323fe1af80b1c620.tar.gz
pounce-113a33bdf883602313fa33fd323fe1af80b1c620.zip
Use a fixed buffer size for SASL PLAIN authentication
handleAuthenticate only sends a single AUTHENTICATE message, so
according to https://ircv3.net/specs/extensions/sasl-3.1.html, its
maximum length is 399. So, we know that the authentication string
can be at most 299 bytes.
-rw-r--r--state.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/state.c b/state.c
index 4d3aa1c..bbc3841 100644
--- a/state.c
+++ b/state.c
@@ -48,14 +48,20 @@ void stateLogin(
 	if (sasl) {
 		serverFormat("CAP REQ :%s\r\n", capList(CapSASL));
 		if (plain) {
-			byte buf[1 + strlen(plain)];
+			// Maxmimum size that fits in a single
+			// AUTHENTICATE message after base64 encoding.
+			byte buf[299];
+			size_t len = 1 + strlen(plain);
+			if (sizeof(buf) < len) {
+				errx(EX_SOFTWARE, "SASL PLAIN is too long");
+			}
 			buf[0] = 0;
 			for (size_t i = 0; plain[i]; ++i) {
 				buf[1 + i] = (plain[i] == ':' ? 0 : plain[i]);
 			}
-			plainBase64 = malloc(BASE64_SIZE(sizeof(buf)));
+			plainBase64 = malloc(BASE64_SIZE(len));
 			if (!plainBase64) err(EX_OSERR, "malloc");
-			base64(plainBase64, buf, sizeof(buf));
+			base64(plainBase64, buf, len);
 		}
 	}
 	serverFormat("NICK %s\r\n", nick);
ect'>Set title after reloadJune McEnroe 2020-08-15Set title on control commandsJune McEnroe If a control command starts a service, the title should be updated. 2020-08-15Add 126 to hardcoded stop exitsJune McEnroe > If a command is not found, the exit status shall be 127. If the > command name is found, but it is not an executable utility, the exit > status shall be 126. Applications that invoke utilities without using > the shell should use these exit status values to report similar errors. [1]: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_08_02 2020-08-15Remove EX_CONFIG from default stopexitsJune McEnroe I've used it for "remote" configuration which could change. 2020-08-15Avoid "control named pipe" phraseJune McEnroe 2020-08-15Check if pipe is writable in wrapperJune McEnroe 2020-08-15Parse config laterJune McEnroe This is just to keep the list of open file descriptors tidier, since parsing the config creates many pipes. 2020-08-15Only log signals other than SIGTERMJune McEnroe 2020-08-15Clarify restart interval in catsitd manualJune McEnroe 2020-08-15Fix resetting restart interval with explicit restartJune McEnroe 2020-08-15Add reset interval after which restart interval is resetJune McEnroe 2020-08-15Log when service name pattern doesn't matchJune McEnroe 2020-08-15Add FreeBSD rc scriptJune McEnroe I'm expecting to also have an OpenBSD rc script. 2020-08-15Call setproctitle with number of servicesJune McEnroe 2020-08-15Rename project to catsitJune McEnroe 2020-08-15Use only LOG_NOTICE and LOG_WARNINGJune McEnroe These are the two priorities that go to a normal place (/var/log/messages) by default. 2020-08-15Make log messages consistentJune McEnroe 2020-08-15Remove closelog callJune McEnroe It's unclear whether closelog is really safe to call in pre-exec context, so just trust that the log is opened with CLOEXEC. 2020-08-15Implement service statusJune McEnroe 2020-08-15Parse control commandsJune McEnroe 2020-08-15Read service pipesJune McEnroe Changed line reading functions to return const char * because modifying the strings by adding '\0' into them screws up the following call. 2020-08-15Implement non-blocking line-buffered readingJune McEnroe 2020-08-15Generate tags fileJune McEnroe 2020-08-15Just use CLOCK_MONOTONIC and clean up includesJune McEnroe CLOCK_MONOTONIC exists everywhere. 2020-08-15Reap childrenJune McEnroe 2020-08-14Implement serviceSignal, serviceStop, serviceRestartJune McEnroe 2020-08-14Reset restartInterval and restartDeadline on startJune McEnroe 2020-08-14Switch to timespec for timeoutsJune McEnroe Can be passed to ppoll(2) directly. 2020-08-14Implement serviceStartJune McEnroe 2020-08-14Flesh out Service structJune McEnroe 2020-08-14Build environment for servicesJune McEnroe 2020-08-14Implement spawntab parsingJune McEnroe 2020-08-14Open syslog, daemonize, write PIDJune McEnroe 2020-08-14Implement user and group lookupJune McEnroe 2020-08-14Add install targetJune McEnroe 2020-08-14Add spawnd skeletonJune McEnroe