diff --git a/os/mitauth.c b/os/mitauth.c index 6c805e7c9..c61918572 100644 --- a/os/mitauth.c +++ b/os/mitauth.c @@ -51,6 +51,13 @@ MitAddCookie(unsigned short data_length, const char *data) { 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 = malloc(sizeof(struct auth)); if (!new) return 0; diff --git a/os/xdmauth.c b/os/xdmauth.c index e1d5a78f1..296269e41 100644 --- a/os/xdmauth.c +++ b/os/xdmauth.c @@ -354,6 +354,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; + } + new = malloc(sizeof(XdmAuthorizationRec)); if (!new) return 0;