From a68f5c125caceb16d07e168b20fa12649efc9789 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Mon, 10 Mar 2025 13:56:34 +0100 Subject: [PATCH] os: auth: generate XIDs in proto funcs only on success Generate the auth object XIDs inside the proto funcs and only on success, so we don't unnecessarily allocate XIDs. Signed-off-by: Enrico Weigelt, metux IT consult --- os/auth.c | 12 +++++------- os/auth.h | 6 +++--- os/mitauth.c | 25 +++++++++++-------------- os/mitauth.h | 2 +- os/xdmauth.c | 8 ++++---- os/xdmauth.h | 2 +- 6 files changed, 25 insertions(+), 30 deletions(-) diff --git a/os/auth.c b/os/auth.c index 23e91beda..d79cbb8b0 100644 --- a/os/auth.c +++ b/os/auth.c @@ -128,9 +128,8 @@ LoadAuthorization(void) if (strlen(protocols[i].name) == auth->name_length && memcmp(protocols[i].name, auth->name, (int) auth->name_length) == 0 && protocols[i].Add) { - ++count; - (*protocols[i].Add) (auth->data_length, auth->data, - FakeClientID(0)); + if (protocols[i].Add(auth->data_length, auth->data)) + count++; } } XauDisposeAuth(auth); @@ -271,7 +270,7 @@ AddAuthorization(unsigned name_length, const char *name, if (strlen(protocols[i].name) == name_length && memcmp(protocols[i].name, name, (int) name_length) == 0 && protocols[i].Add) { - return (*protocols[i].Add) (data_length, data, FakeClientID(0)); + return protocols[i].Add(data_length, data); } } return 0; @@ -290,9 +289,8 @@ GenerateAuthorization(unsigned name_length, if (strlen(protocols[i].name) == name_length && memcmp(protocols[i].name, name, (int) name_length) == 0 && protocols[i].Generate) { - return (*protocols[i].Generate) (data_length, data, - FakeClientID(0), - data_length_return, data_return); + return protocols[i].Generate(data_length, data, + data_length_return, data_return); } } return -1; diff --git a/os/auth.h b/os/auth.h index b626828c8..ba1a66059 100644 --- a/os/auth.h +++ b/os/auth.h @@ -11,8 +11,8 @@ #define AuthInitArgs void typedef void (*AuthInitFunc) (AuthInitArgs); -#define AuthAddCArgs unsigned short data_length, const char *data, XID id -typedef int (*AuthAddCFunc) (AuthAddCArgs); +#define AuthAddCArgs unsigned short data_length, const char *data +typedef XID (*AuthAddCFunc) (AuthAddCArgs); #define AuthCheckArgs unsigned short data_length, const char *data, ClientPtr client, const char **reason typedef XID (*AuthCheckFunc) (AuthCheckArgs); @@ -20,7 +20,7 @@ typedef XID (*AuthCheckFunc) (AuthCheckArgs); #define AuthFromIDArgs XID id, unsigned short *data_lenp, char **datap typedef int (*AuthFromIDFunc) (AuthFromIDArgs); -#define AuthGenCArgs unsigned data_length, const char *data, XID id, unsigned *data_length_return, char **data_return +#define AuthGenCArgs unsigned data_length, const char *data, unsigned *data_length_return, char **data_return typedef XID (*AuthGenCFunc) (AuthGenCArgs); #define AuthRemCArgs unsigned short data_length, const char *data diff --git a/os/mitauth.c b/os/mitauth.c index 753f9d2a3..0d960039f 100644 --- a/os/mitauth.c +++ b/os/mitauth.c @@ -46,8 +46,8 @@ static struct auth { XID id; } *mit_auth; -int -MitAddCookie(unsigned short data_length, const char *data, XID id) +XID +MitAddCookie(unsigned short data_length, const char *data) { struct auth *new = calloc(1, sizeof(struct auth)); if (!new) @@ -61,8 +61,8 @@ MitAddCookie(unsigned short data_length, const char *data, XID id) mit_auth = new; memcpy(new->data, data, (size_t) data_length); new->len = data_length; - new->id = id; - return 1; + new->id = FakeClientID(0); + return new->id; } XID @@ -149,10 +149,9 @@ GenerateRandomData(int len, char *buf) XID MitGenerateCookie(unsigned data_length, const char *data, - XID id, unsigned *data_length_return, char **data_return) + unsigned *data_length_return, char **data_return) { int i = 0; - int status; while (data_length--) { cookie[i++] += *data++; @@ -160,13 +159,11 @@ MitGenerateCookie(unsigned data_length, i = 0; } GenerateRandomData(sizeof(cookie), cookie); - status = MitAddCookie(sizeof(cookie), cookie, id); - if (!status) { - id = -1; - } - else { - *data_return = cookie; - *data_length_return = sizeof(cookie); - } + XID id = MitAddCookie(sizeof(cookie), cookie); + if (!id) + return -1; + + *data_return = cookie; + *data_length_return = sizeof(cookie); return id; } diff --git a/os/mitauth.h b/os/mitauth.h index 143fa46bc..40a3c7a0c 100644 --- a/os/mitauth.h +++ b/os/mitauth.h @@ -5,7 +5,7 @@ XID MitCheckCookie(AuthCheckArgs); XID MitGenerateCookie(AuthGenCArgs); -int MitAddCookie(AuthAddCArgs); +XID MitAddCookie(AuthAddCArgs); int MitFromID(AuthFromIDArgs); int MitRemoveCookie(AuthRemCArgs); int MitResetCookie(AuthRstCArgs); diff --git a/os/xdmauth.c b/os/xdmauth.c index 833c72155..f96740673 100644 --- a/os/xdmauth.c +++ b/os/xdmauth.c @@ -319,8 +319,8 @@ XdmAuthorizationValidate(unsigned char *plain, int length, return client; } -int -XdmAddCookie(unsigned short data_length, const char *data, XID id) +XID +XdmAddCookie(unsigned short data_length, const char *data) { unsigned char *rho_bits, *key_bits; @@ -360,8 +360,8 @@ XdmAddCookie(unsigned short data_length, const char *data, XID id) xdmAuth = new; memcpy(new->key.data, key_bits, 8); memcpy(new->rho.data, rho_bits, 8); - new->id = id; - return 1; + new->id = FakeClientID(0); + return new->id; } XID diff --git a/os/xdmauth.h b/os/xdmauth.h index e922b2e99..dfa894c4d 100644 --- a/os/xdmauth.h +++ b/os/xdmauth.h @@ -4,7 +4,7 @@ #include "auth.h" XID XdmCheckCookie(AuthCheckArgs); -int XdmAddCookie(AuthAddCArgs); +XID XdmAddCookie(AuthAddCArgs); int XdmFromID(AuthFromIDArgs); int XdmRemoveCookie(AuthRemCArgs); int XdmResetCookie(AuthRstCArgs);