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 <info@metux.net>
This commit is contained in:
Enrico Weigelt, metux IT consult 2025-03-10 13:56:34 +01:00
parent e536c2035c
commit a68f5c125c
6 changed files with 25 additions and 30 deletions

View File

@ -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,8 +289,7 @@ 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),
return protocols[i].Generate(data_length, data,
data_length_return, data_return);
}
}

View File

@ -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

View File

@ -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 {
XID id = MitAddCookie(sizeof(cookie), cookie);
if (!id)
return -1;
*data_return = cookie;
*data_length_return = sizeof(cookie);
}
return id;
}

View File

@ -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);

View File

@ -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

View File

@ -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);