* BIRD -- Core Configuration
*
* (c) 1998--2000 Martin Mares <mj@ucw.cz>
+ * (c) 2004 Ondrej Filip <feela@network.cz>
*
* Can be freely distributed and used under the terms of the GNU GPL.
*/
password_item_begin:
PASSWORD TEXT {
- static int id = 0;
+ static int id = 1;
this_p_item = cfg_alloc(sizeof (struct password_item));
this_p_item->password = $2;
this_p_item->genfrom = 0;
| GENERATE TO datetime ';' password_item_params { this_p_item->gento = $3; }
| ACCEPT FROM datetime ';' password_item_params { this_p_item->accfrom = $3; }
| ACCEPT TO datetime ';' password_item_params { this_p_item->accto = $3; }
- | ID expr ';' password_item_params { this_p_item->id = $2; }
+ | ID expr ';' password_item_params { this_p_item->id = $2; if ($2 <= 0) cf_error("Password ID has to be greated than zero."); }
;
password_list:
this_p_item->gento = TIME_INFINITY;
this_p_item->accfrom = 0;
this_p_item->accto = TIME_INFINITY;
- this_p_item->id = 0;
+ this_p_item->id = 1;
add_tail(this_p_list, &this_p_item->n);
$$ = this_p_list;
}
password_cpy(password, passwd->password, OSPF_AUTH_CRYPT_SIZE);
MD5Update(&ctxt, password, OSPF_AUTH_CRYPT_SIZE);
MD5Final(tail, &ctxt);
-
break;
default:
bug("Unknown authentication type");
WALK_LIST(ptmp, *(ifa->passwords))
{
- if (pkt->u.md5.keyid != pass->id) continue;
- if ((pass->genfrom > now) || (pass->gento < now)) continue;
+ if (pkt->u.md5.keyid != ptmp->id) continue;
+ if ((ptmp->genfrom > now) || (ptmp->gento < now)) continue;
pass = ptmp;
break;
}
if(n)
{
- if(ntohs(pkt->u.md5.csn) <= n->csn)
+ if(ntohs(pkt->u.md5.csn) < n->csn)
{
OSPF_TRACE(D_PACKETS, "OSPF_auth: lower sequence number");
return 0;
}
-
n->csn = ntohs(pkt->u.md5.csn);
}
password_cpy(password, pass->password, OSPF_AUTH_CRYPT_SIZE);
MD5Update(&ctxt, password, OSPF_AUTH_CRYPT_SIZE);
MD5Final(md5sum, &ctxt);
- if (!memcmp(md5sum, tail, OSPF_AUTH_CRYPT_SIZE))
+ if (memcmp(md5sum, tail, OSPF_AUTH_CRYPT_SIZE))
{
OSPF_TRACE(D_PACKETS, "OSPF_auth: wrong md5 digest");
return 0;
return 1;
}
- if ((ifa->autype != OSPF_AUTH_CRYPT) && (!ipsum_verify(ps, 16, (void *) ps + sizeof(struct ospf_packet),
+ if ((ps->autype != htons(OSPF_AUTH_CRYPT)) &&
+ (!ipsum_verify(ps, 16, (void *) ps + sizeof(struct ospf_packet),
ntohs(ps->length) - sizeof(struct ospf_packet), NULL)))
{
log(L_ERR "%s%I - bad checksum", mesg, sk->faddr);