diff --git a/os/mitauth.c b/os/mitauth.c index 867e0cb02..ac519b807 100644 --- a/os/mitauth.c +++ b/os/mitauth.c @@ -49,7 +49,16 @@ static struct auth { XID MitAddCookie(unsigned short data_length, const char *data) { - struct auth *new = calloc(1, sizeof(struct auth)); + struct auth *new; + + // check for possible duplicate and return it instead + for (struct auth *walk=mit_auth; walk; walk=walk->next) { + if ((walk->len == data_length) && + (memcmp(walk->data, data, data_length) == 0)) + return walk->id; + } + + new = calloc(1, sizeof(struct auth)); if (!new) return 0; new->data = calloc(1, (unsigned) data_length); diff --git a/os/xdmauth.c b/os/xdmauth.c index f96740673..2047b7173 100644 --- a/os/xdmauth.c +++ b/os/xdmauth.c @@ -353,6 +353,14 @@ XdmAddCookie(unsigned short data_length, const char *data) /* the first octet of the key must be zero */ if (key_bits[0] != '\0') return 0; + + /* check for possible duplicate and return it */ + for (XdmAuthorizationRec *walk = xdmAuth; walk; walk=walk->next) { + if ((memcmp(walk->key.data, key_bits, 8)==0) && + (memcmp(walk->rho.data, rho_bits, 8)==0)) + return walk->id; + } + XdmAuthorizationPtr new = calloc(1, sizeof(XdmAuthorizationRec)); if (!new) return 0;