/** * Process an KEY_REQ message */ void handle_key_req(const union sockaddr_u *src, const unsigned char *packet, unsigned packetlen) { const struct key_req_h *keyreq; struct timeval current_timestamp; char destname[INET6_ADDRSTRLEN]; int rval; keyreq = (const struct key_req_h *)(packet + sizeof(struct uftp_h)); if ((rval = getnameinfo((const struct sockaddr *)src, family_len(*src), destname, sizeof(destname), NULL, 0, NI_NUMERICHOST)) != 0) { log1(0, 0, 0, "getnameinfo failed: %s", gai_strerror(rval)); } if ((packetlen < sizeof(struct uftp_h) + (keyreq->hlen * 4U)) || ((keyreq->hlen * 4U) < sizeof(struct key_req_h))) { log1(0,0,0,"Rejecting KEY_REQ from %s: invalid message size", destname); return; } log2(0, 0, 0, "Received KEY_REQ from %s", destname); gettimeofday(¤t_timestamp, NULL); if (diff_sec(current_timestamp, last_key_req) > KEY_REQ_LIMIT) { send_proxy_key(); } }
/** * Process an KEY_REQ message */ void handle_key_req(const struct sockaddr_in *src, const unsigned char *packet) { struct hostent *hp; struct timeval current_timestamp; if (!noname && (hp = gethostbyaddr((char *)&src->sin_addr, sizeof(struct in_addr), AF_INET))) { log(0, 0, "Received KEY_REQ from %s (%s)", hp->h_name, inet_ntoa(src->sin_addr)); } else { log(0, 0, "Received KEY_REQ from %s", inet_ntoa(src->sin_addr)); } gettimeofday(¤t_timestamp, NULL); if (diff_sec(current_timestamp, last_key_req) > KEY_REQ_LIMIT) { send_proxy_key(); } }