diff options
-rw-r--r-- | nest/config.Y | 3 | ||||
-rw-r--r-- | nest/password.c | 28 | ||||
-rw-r--r-- | nest/password.h | 7 |
3 files changed, 36 insertions, 2 deletions
diff --git a/nest/config.Y b/nest/config.Y index b0634a62..bb1328cc 100644 --- a/nest/config.Y +++ b/nest/config.Y @@ -19,7 +19,7 @@ CF_DECLS CF_KEYWORDS(ROUTER, ID, PROTOCOL, PREFERENCE, DISABLED, DEBUG, ALL, OFF, DIRECT) CF_KEYWORDS(INTERFACE, IMPORT, EXPORT, FILTER, NONE, TABLE) -CF_KEYWORDS(PASSWORD, FROM, TO, ID) +CF_KEYWORDS(PASSWORD, FROM, PASSIVE, TO, ID) %type <i> idval %type <f> imexport @@ -148,6 +148,7 @@ password_items: /* empty */ { } | FROM datetime password_items { last_password_item->from = $2; } | TO datetime password_items { last_password_item->to = $2; } + | PASSIVE datetime password_items { last_password_item->passive = $2; } | ID NUM password_items { last_password_item->id = $2; } ; diff --git a/nest/password.c b/nest/password.c index ff084b41..ce7941ea 100644 --- a/nest/password.c +++ b/nest/password.c @@ -10,3 +10,31 @@ #include "nest/password.h" struct password_item *last_password_item = NULL; + +static int +password_goodness(struct password_item *i) +{ + if (i->from > now) + return 0; + if (i->to < now) + return 0; + if (i->passive < now) + return 1; + return 2; +} + +struct password_item * +get_best_password(struct password_item *head, int flags) +{ + int good = -1; + struct password_item *best = NULL; + + while (head) { + int cur = password_goodness(head); + if (cur > good) { + good = cur; + best = head; + } + } + return best; +} diff --git a/nest/password.h b/nest/password.h index b457495a..16f4385a 100644 --- a/nest/password.h +++ b/nest/password.h @@ -8,12 +8,17 @@ #ifndef PASSWORD_H #define PASSWORD_H +#include "lib/timer.h" + struct password_item { struct password_item *next; char *password; int id; - unsigned int from, to; /* We really don't care about time before 1970 */ + bird_clock_t from, passive, to; }; extern struct password_item *last_password_item; + +struct password_item *get_best_password(struct password_item *head, int flags); + #endif |