From 1bc0a2012c0b24b93af16dda62f94aa987010574 Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Wed, 3 Jan 2018 19:26:33 +0100 Subject: [PATCH] auth: client protocol: Record minor version for authentication client connection. --- src/auth/auth-client-connection.c | 17 ++++++++++++++--- src/auth/auth-client-connection.h | 1 + 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/auth/auth-client-connection.c b/src/auth/auth-client-connection.c index 702e507e7d..78293fd6b2 100644 --- a/src/auth/auth-client-connection.c +++ b/src/auth/auth-client-connection.c @@ -269,16 +269,27 @@ static void auth_client_input(struct auth_client_connection *conn) return; if (!conn->version_received) { - /* make sure the major version matches */ + unsigned int vmajor, vminor; + const char *p; + + /* split the version line */ if (strncmp(line, "VERSION\t", 8) != 0 || - !str_uint_equals(t_strcut(line + 8, '\t'), - AUTH_CLIENT_PROTOCOL_MAJOR_VERSION)) { + str_parse_uint(line + 8, &vmajor, &p) < 0 || + *(p++) != '\t' || str_to_uint(p, &vminor) < 0) { + i_error("Authentication client " + "sent invalid VERSION line: %s", line); + auth_client_connection_destroy(&conn); + return; + } + /* make sure the major version matches */ + if (vmajor != AUTH_MASTER_PROTOCOL_MAJOR_VERSION) { i_error("Authentication client " "not compatible with this server " "(mixed old and new binaries?)"); auth_client_connection_destroy(&conn); return; } + conn->version_minor = vminor; conn->version_received = TRUE; continue; } diff --git a/src/auth/auth-client-connection.h b/src/auth/auth-client-connection.h index a42ec72415..91a693f3b6 100644 --- a/src/auth/auth-client-connection.h +++ b/src/auth/auth-client-connection.h @@ -13,6 +13,7 @@ struct auth_client_connection { struct istream *input; struct ostream *output; + unsigned int version_minor; unsigned int pid; unsigned int connect_uid; uint8_t cookie[MASTER_AUTH_COOKIE_SIZE]; -- 2.47.3