- char *from_id, *to_id;
- conn_list_t *from, *to;
-cp
- if(sscanf(cl->buffer, "%*d %as %as", &from_id, &to_id) != 2)
- {
- syslog(LOG_ERR, _("Got bad REQ_KEY from %s (%s)"), cl->id, cl->hostname);
- return -1;
- }
-
- if(!(from = lookup_id(from_id)))
- {
- syslog(LOG_ERR, _("Got REQ_KEY from %s (%s) origin %s which does not exist in our connection list"), cl->id, cl->hostname, from_id);
- free(from_id); free(to_id);
- return -1;
- }
-
- /* Check if this key request is for us */
-
- if(!strcmp(id, myself->strcmp))
- {
- send_ans_key(myself, from, myself->datakey);
- }
- else
- {
- if(!(to = lookup_id(to_id)))
- {
- syslog(LOG_ERR, _("Got REQ_KEY from %s (%s) destination %s which does not exist in our connection list"), cl->id, cl->hostname, to_id);
- free(from_id); free(to_id);
- return -1;
- }
- send_req_key(from, to);
- }
-
- free(from_id); free(to_id);
-cp
- return 0;
-}
-
-int send_ans_key(conn_list_t *from, conn_list_t *to, char *datakey)
-{
-cp
- return send_request(to->nexthop, "%d %s %s %s", ANS_KEY, from->id, to->id, datakey);
-}
-
-int ans_key_h(conn_list_t *cl)
-{
- char *from_id, *to_id, *datakey;
- int keylength;
- conn_list_t *from, *to;
-cp
- if(sscanf(cl->buffer, "%*d %as %as %as", &from_id, &to_id, &datakey) != 3)
- {
- syslog(LOG_ERR, _("Got bad ANS_KEY from %s (%s)"), cl->id, cl->hostname);
- return -1;
- }
-
- if(!(from = lookup_id(from_id)))
- {
- syslog(LOG_ERR, _("Got ANS_KEY from %s (%s) origin %s which does not exist in our connection list"), cl->id, cl->hostname, from_id);
- free(from_id); free(to_id); free(datakey);
- return -1;
- }
-
- /* Check if this key request is for us */
-
- if(!strcmp(id, myself->strcmp))
- {
- /* It is for us, convert it to binary and set the key with it. */
-
- keylength = strlen(datakey);
-
- if((keylength%2) || (keylength <= 0))
- {
- syslog(LOG_ERR, _("Got bad ANS_KEY from %s (%s) origin %s: invalid key"), cl->id, cl->hostname, from->id);
- free(from_id); free(to_id); free(datakey);
- return -1;
- }
- keylength /= 2;
- hex2bin(datakey, datakey, keylength);
- BF_set_key(cl->datakey, keylength, datakey);
- }
- else
- {
- if(!(to = lookup_id(to_id)))
- {
- syslog(LOG_ERR, _("Got ANS_KEY from %s (%s) destination %s which does not exist in our connection list"), cl->id, cl->hostname, to_id);
- free(from_id); free(to_id); free(datakey);
- return -1;
- }
- send_ans_key(from, to, datakey);
- }
-
- free(from_id); free(to_id); free(datakey);
-cp
- return 0;
-}
-
-/* Old routines */