mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-14 15:18:44 +00:00
22f54eaee6
Memory allocation is a fragile part of BIRD and we need checking that everybody is using the resource pools in an appropriate way. To assure this, all the resource pools are associated with locking domains and every resource manipulation is thoroughly checked whether the appropriate locking domain is locked. With transitive resource manipulation like resource dumping or mass free operations, domains are locked and unlocked on the go, thus we require pool domains to have higher order than their parent to allow for this transitive operations. Adding pool locking revealed some cases of insecure memory manipulation and this commit fixes that as well.
41 lines
1.0 KiB
C
41 lines
1.0 KiB
C
/*
|
|
* BIRD -- Password handling
|
|
*
|
|
* (c) 1999 Pavel Machek <pavel@ucw.cz>
|
|
* (c) 2004 Ondrej Filip <feela@network.cz>
|
|
*
|
|
* Can be freely distributed and used under the terms of the GNU GPL.
|
|
*/
|
|
|
|
#ifndef PASSWORD_H
|
|
#define PASSWORD_H
|
|
|
|
#include "lib/lists.h"
|
|
|
|
struct password_item {
|
|
node n;
|
|
const char *password; /* Key data, null terminated */
|
|
uint length; /* Key length, without null */
|
|
uint id; /* Key ID */
|
|
uint alg; /* MAC algorithm */
|
|
btime accfrom, accto, genfrom, gento;
|
|
};
|
|
|
|
extern struct password_item *last_password_item;
|
|
|
|
struct password_item *password_find(list *l, int first_fit);
|
|
struct password_item *password_find_by_id(list *l, uint id);
|
|
struct password_item *password_find_by_value(list *l, char *pass, uint size);
|
|
void password_validate_length(const struct password_item *p);
|
|
|
|
static inline int password_verify(struct password_item *p1, char *p2, uint size)
|
|
{
|
|
char buf[size];
|
|
strncpy(buf, p1->password, size);
|
|
return !memcmp(buf, p2, size);
|
|
}
|
|
|
|
uint max_mac_length(list *l);
|
|
|
|
#endif
|