]> git.ipfire.org Git - thirdparty/bird.git/blobdiff - nest/password.c
Doc: Remove some superfluous slashes
[thirdparty/bird.git] / nest / password.c
index f0f433abe8df25c24aea612be4529f33eec975c1..e48137413f8e5d31e88f0158a4b99746b18910e3 100644 (file)
@@ -1,52 +1,83 @@
 /*
  *     BIRD -- Password handling
  *
- *     Copyright 1999 Pavel Machek <pavel@ucw.cz>
+ *     (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.
  */
 
 #include "nest/bird.h"
 #include "nest/password.h"
+#include "lib/string.h"
+#include "lib/mac.h"
 
 struct password_item *last_password_item = NULL;
 
-static int
-password_goodness(struct password_item *i)
+struct password_item *
+password_find(list *l, int first_fit)
 {
-  if (i->from > now)
-    return 0;
-  if (i->to < now)
-    return 0;
-  if (i->passive < now)
-    return 1;
-  return 2;
+  struct password_item *pi;
+  struct password_item *pf = NULL;
+
+  if (l)
+  {
+    WALK_LIST(pi, *l)
+    {
+      if ((pi->genfrom < now_real) && (pi->gento > now_real))
+      {
+       if (first_fit)
+         return pi;
+
+       if (!pf || pf->genfrom < pi->genfrom)
+         pf = pi;
+      }
+    }
+  }
+  return pf;
 }
 
 struct password_item *
-get_best_password(struct password_item *head, int flags)
+password_find_by_id(list *l, uint id)
 {
-  int good = -1;
-  struct password_item *best = NULL;
-
-  while (head) {
-    int cur = password_goodness(head);
-    if (cur > good) {
-      good = cur;
-      best = head;
-    }
-  }
-  return best;
+  struct password_item *pi;
+
+  if (!l)
+    return NULL;
+
+  WALK_LIST(pi, *l)
+    if ((pi->id == id) && (pi->accfrom <= now_real) && (now_real < pi->accto))
+      return pi;
+
+  return NULL;
 }
 
-void
-password_strncpy(char *to, char *from, int len)
+struct password_item *
+password_find_by_value(list *l, char *pass, uint size)
 {
-  int i;
-  for (i=0; i<len; i++) {
-    *to++ = *from;
-    if (*from)
-      from++;
-  }
+  struct password_item *pi;
+
+  if (!l)
+    return NULL;
+
+  WALK_LIST(pi, *l)
+    if (password_verify(pi, pass, size) && (pi->accfrom <= now_real) && (now_real < pi->accto))
+      return pi;
+
+  return NULL;
 }
 
+uint
+max_mac_length(list *l)
+{
+  struct password_item *pi;
+  uint val = 0;
+
+  if (!l)
+    return 0;
+
+  WALK_LIST(pi, *l)
+    val = MAX(val, mac_type_length(pi->alg));
+
+  return val;
+}