]> git.ipfire.org Git - thirdparty/bird.git/blobdiff - nest/password.c
Doc: Remove some superfluous slashes
[thirdparty/bird.git] / nest / password.c
index 80c4c7b473c0af7c15ac5f55f0d9333a4d33b9d6..e48137413f8e5d31e88f0158a4b99746b18910e3 100644 (file)
 #include "nest/bird.h"
 #include "nest/password.h"
 #include "lib/string.h"
+#include "lib/mac.h"
 
 struct password_item *last_password_item = NULL;
 
 struct password_item *
-password_find(list *l)
+password_find(list *l, int first_fit)
 {
   struct password_item *pi;
+  struct password_item *pf = NULL;
 
   if (l)
   {
     WALK_LIST(pi, *l)
     {
       if ((pi->genfrom < now_real) && (pi->gento > now_real))
-        return pi;
+      {
+       if (first_fit)
+         return pi;
+
+       if (!pf || pf->genfrom < pi->genfrom)
+         pf = pi;
+      }
     }
   }
+  return pf;
+}
+
+struct password_item *
+password_find_by_id(list *l, uint id)
+{
+  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_cpy(char *dst, char *src, int size)
+struct password_item *
+password_find_by_value(list *l, char *pass, uint size)
 {
-  bzero(dst, size);
-  memcpy(dst, src, (strlen(src) < (unsigned) size ? strlen(src) : (unsigned) size));
+  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;
+}