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 &&
|
if (strlen(protocols[i].name) == auth->name_length &&
|
||||||
memcmp(protocols[i].name, auth->name,
|
memcmp(protocols[i].name, auth->name,
|
||||||
(int) auth->name_length) == 0 && protocols[i].Add) {
|
(int) auth->name_length) == 0 && protocols[i].Add) {
|
||||||
++count;
|
if (protocols[i].Add(auth->data_length, auth->data))
|
||||||
(*protocols[i].Add) (auth->data_length, auth->data,
|
count++;
|
||||||
FakeClientID(0));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
XauDisposeAuth(auth);
|
XauDisposeAuth(auth);
|
||||||
|
@ -271,7 +270,7 @@ AddAuthorization(unsigned name_length, const char *name,
|
||||||
if (strlen(protocols[i].name) == name_length &&
|
if (strlen(protocols[i].name) == name_length &&
|
||||||
memcmp(protocols[i].name, name, (int) name_length) == 0 &&
|
memcmp(protocols[i].name, name, (int) name_length) == 0 &&
|
||||||
protocols[i].Add) {
|
protocols[i].Add) {
|
||||||
return (*protocols[i].Add) (data_length, data, FakeClientID(0));
|
return protocols[i].Add(data_length, data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -290,9 +289,8 @@ GenerateAuthorization(unsigned name_length,
|
||||||
if (strlen(protocols[i].name) == name_length &&
|
if (strlen(protocols[i].name) == name_length &&
|
||||||
memcmp(protocols[i].name, name, (int) name_length) == 0 &&
|
memcmp(protocols[i].name, name, (int) name_length) == 0 &&
|
||||||
protocols[i].Generate) {
|
protocols[i].Generate) {
|
||||||
return (*protocols[i].Generate) (data_length, data,
|
return protocols[i].Generate(data_length, data,
|
||||||
FakeClientID(0),
|
data_length_return, data_return);
|
||||||
data_length_return, data_return);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -11,8 +11,8 @@
|
||||||
#define AuthInitArgs void
|
#define AuthInitArgs void
|
||||||
typedef void (*AuthInitFunc) (AuthInitArgs);
|
typedef void (*AuthInitFunc) (AuthInitArgs);
|
||||||
|
|
||||||
#define AuthAddCArgs unsigned short data_length, const char *data, XID id
|
#define AuthAddCArgs unsigned short data_length, const char *data
|
||||||
typedef int (*AuthAddCFunc) (AuthAddCArgs);
|
typedef XID (*AuthAddCFunc) (AuthAddCArgs);
|
||||||
|
|
||||||
#define AuthCheckArgs unsigned short data_length, const char *data, ClientPtr client, const char **reason
|
#define AuthCheckArgs unsigned short data_length, const char *data, ClientPtr client, const char **reason
|
||||||
typedef XID (*AuthCheckFunc) (AuthCheckArgs);
|
typedef XID (*AuthCheckFunc) (AuthCheckArgs);
|
||||||
|
@ -20,7 +20,7 @@ typedef XID (*AuthCheckFunc) (AuthCheckArgs);
|
||||||
#define AuthFromIDArgs XID id, unsigned short *data_lenp, char **datap
|
#define AuthFromIDArgs XID id, unsigned short *data_lenp, char **datap
|
||||||
typedef int (*AuthFromIDFunc) (AuthFromIDArgs);
|
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);
|
typedef XID (*AuthGenCFunc) (AuthGenCArgs);
|
||||||
|
|
||||||
#define AuthRemCArgs unsigned short data_length, const char *data
|
#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;
|
XID id;
|
||||||
} *mit_auth;
|
} *mit_auth;
|
||||||
|
|
||||||
int
|
XID
|
||||||
MitAddCookie(unsigned short data_length, const char *data, XID id)
|
MitAddCookie(unsigned short data_length, const char *data)
|
||||||
{
|
{
|
||||||
struct auth *new = calloc(1, sizeof(struct auth));
|
struct auth *new = calloc(1, sizeof(struct auth));
|
||||||
if (!new)
|
if (!new)
|
||||||
|
@ -61,8 +61,8 @@ MitAddCookie(unsigned short data_length, const char *data, XID id)
|
||||||
mit_auth = new;
|
mit_auth = new;
|
||||||
memcpy(new->data, data, (size_t) data_length);
|
memcpy(new->data, data, (size_t) data_length);
|
||||||
new->len = data_length;
|
new->len = data_length;
|
||||||
new->id = id;
|
new->id = FakeClientID(0);
|
||||||
return 1;
|
return new->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
XID
|
XID
|
||||||
|
@ -149,10 +149,9 @@ GenerateRandomData(int len, char *buf)
|
||||||
XID
|
XID
|
||||||
MitGenerateCookie(unsigned data_length,
|
MitGenerateCookie(unsigned data_length,
|
||||||
const char *data,
|
const char *data,
|
||||||
XID id, unsigned *data_length_return, char **data_return)
|
unsigned *data_length_return, char **data_return)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
int status;
|
|
||||||
|
|
||||||
while (data_length--) {
|
while (data_length--) {
|
||||||
cookie[i++] += *data++;
|
cookie[i++] += *data++;
|
||||||
|
@ -160,13 +159,11 @@ MitGenerateCookie(unsigned data_length,
|
||||||
i = 0;
|
i = 0;
|
||||||
}
|
}
|
||||||
GenerateRandomData(sizeof(cookie), cookie);
|
GenerateRandomData(sizeof(cookie), cookie);
|
||||||
status = MitAddCookie(sizeof(cookie), cookie, id);
|
XID id = MitAddCookie(sizeof(cookie), cookie);
|
||||||
if (!status) {
|
if (!id)
|
||||||
id = -1;
|
return -1;
|
||||||
}
|
|
||||||
else {
|
*data_return = cookie;
|
||||||
*data_return = cookie;
|
*data_length_return = sizeof(cookie);
|
||||||
*data_length_return = sizeof(cookie);
|
|
||||||
}
|
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
XID MitCheckCookie(AuthCheckArgs);
|
XID MitCheckCookie(AuthCheckArgs);
|
||||||
XID MitGenerateCookie(AuthGenCArgs);
|
XID MitGenerateCookie(AuthGenCArgs);
|
||||||
int MitAddCookie(AuthAddCArgs);
|
XID MitAddCookie(AuthAddCArgs);
|
||||||
int MitFromID(AuthFromIDArgs);
|
int MitFromID(AuthFromIDArgs);
|
||||||
int MitRemoveCookie(AuthRemCArgs);
|
int MitRemoveCookie(AuthRemCArgs);
|
||||||
int MitResetCookie(AuthRstCArgs);
|
int MitResetCookie(AuthRstCArgs);
|
||||||
|
|
|
@ -319,8 +319,8 @@ XdmAuthorizationValidate(unsigned char *plain, int length,
|
||||||
return client;
|
return client;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
XID
|
||||||
XdmAddCookie(unsigned short data_length, const char *data, XID id)
|
XdmAddCookie(unsigned short data_length, const char *data)
|
||||||
{
|
{
|
||||||
unsigned char *rho_bits, *key_bits;
|
unsigned char *rho_bits, *key_bits;
|
||||||
|
|
||||||
|
@ -360,8 +360,8 @@ XdmAddCookie(unsigned short data_length, const char *data, XID id)
|
||||||
xdmAuth = new;
|
xdmAuth = new;
|
||||||
memcpy(new->key.data, key_bits, 8);
|
memcpy(new->key.data, key_bits, 8);
|
||||||
memcpy(new->rho.data, rho_bits, 8);
|
memcpy(new->rho.data, rho_bits, 8);
|
||||||
new->id = id;
|
new->id = FakeClientID(0);
|
||||||
return 1;
|
return new->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
XID
|
XID
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
#include "auth.h"
|
#include "auth.h"
|
||||||
|
|
||||||
XID XdmCheckCookie(AuthCheckArgs);
|
XID XdmCheckCookie(AuthCheckArgs);
|
||||||
int XdmAddCookie(AuthAddCArgs);
|
XID XdmAddCookie(AuthAddCArgs);
|
||||||
int XdmFromID(AuthFromIDArgs);
|
int XdmFromID(AuthFromIDArgs);
|
||||||
int XdmRemoveCookie(AuthRemCArgs);
|
int XdmRemoveCookie(AuthRemCArgs);
|
||||||
int XdmResetCookie(AuthRstCArgs);
|
int XdmResetCookie(AuthRstCArgs);
|
||||||
|
|
Loading…
Reference in New Issue