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:
parent
e536c2035c
commit
a68f5c125c
12
os/auth.c
12
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;
|
||||
|
|
|
@ -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
|
||||
|
|
25
os/mitauth.c
25
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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue