MD5Init(&ctx);
- char *digest_data = (char *) malloc(sizeof(char) * (LEN_PKT_NOMAC + cmp_size));
+ char *digest_data = (char *) malloc(sizeof(char) * (LEN_PKT_NOMAC + cmp_key->key_len));
for(a=0; a<LEN_PKT_NOMAC; a++)
digest_data[a] = pkt_data[a];
char kbuf[96];
FILE *keyf = fopen(keyfile, "r");
register int a, line_cnt, line_limit;
- struct key *prev;
+ struct key *prev = NULL;
if(keyf == NULL) {
if(ENABLED_OPT(NORMALVERBOSE))
#endif
sscanf(kbuf, "%i %c %16s", &act->key_id, &act->type, act->key_seq);
- act->key_len = strlen(key_seq);
+ act->key_len = strlen(act->key_seq);
#ifdef DEBUG
printf("sntp auth_init: key_id %i type %c with key %s\n", act->key_id, act->type, act->key_seq);
struct key *next;
};
-int auth_md5(char *pkt_data, int mac_size, char *cmp_key, int cmp_size);
+int auth_md5(char *pkt_data, int mac_size, struct key *cmp_key);
int auth_init(char *keyfile, struct key **keys);
void get_key(int key_id, struct key **d_key);
return BROADCAST_FAILED;
break;
- default:
+/* default: */
socklen_t ss_len = SOCKLEN(ras);
+
recv_bytes = recvfrom(rsock, rdata, rdata_len, 0, (struct sockaddr *) ras, (socklen_t *) &ss_len);
}
{
struct sockaddr_storage sender;
register int a;
- int is_authentic, has_mac, orig_pkt_len;
+ int is_authentic, has_mac = 0, orig_pkt_len;
char *rdata = (char *) malloc(sizeof(char) * 256);
register int a;
int has_mac, is_authentic, orig_pkt_len;
- l_fp org;
-
/* Much space, just to be sure */
- rdata = (char *) malloc(sizeof(char) * 512);
+ rdata = (char *) malloc(sizeof(char) * 256);
- int pkt_len = recvdata(rsock, &sender, rdata, 512);
+ int pkt_len = recvdata(rsock, &sender, rdata, 256);
if(!done) {
/* Do something about it, first check for a maximum length of ntp packets,
if(ENABLED_OPT(AUTHENTICATION)) {
/* We want a authenticated packet */
if(ENABLED_OPT(NORMALVERBOSE)) {
- char *hostname = ss_to_str(sas);
+ char *hostname = ss_to_str(&sender);
printf("sntp recvpkt: Broadcast packet received from %s is not authentic. Will discard this packet.\n",
hostname);
* use it anyways
*/
if(ENABLED_OPT(NORMALVERBOSE)) {
- char *hostname = ss_to_str(sas);
+ char *hostname = ss_to_str(&sender);
printf("sntp recvpkt: Broadcast packet received from %s is not authentic. Authentication not enforced.\n",
hostname);
else {
/* Yay! Things worked out! */
if(ENABLED_OPT(NORMALVERBOSE)) {
- char *hostname = ss_to_str(sas);
+ char *hostname = ss_to_str(&sender);
printf("sntp recvpkt: Broadcast packet received from %s successfully authenticated using key id %i.\n",
hostname, rpkt->mac[0]);