From: Johannes Maximilian Kuehn Date: Sat, 22 Nov 2008 00:22:42 +0000 (+0100) Subject: crypto.c: X-Git-Tag: NTP_4_2_5P150~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=850bb17c8c173a009c151c9891801d83b15bd173;p=thirdparty%2Fntp.git crypto.c: Fixed auth_init to detect empty lines and malformed entries bk: 492750d2ZUg45TR7tUba_BF6Iqv7_Q --- diff --git a/gsoc_sntp/crypto.c b/gsoc_sntp/crypto.c index f1d258439..e3335dcb3 100644 --- a/gsoc_sntp/crypto.c +++ b/gsoc_sntp/crypto.c @@ -71,12 +71,13 @@ auth_init ( struct key **keys ) { - printf("auth_init: %s\n", keyfile); - char kbuf[96]; FILE *keyf = fopen(keyfile, "r"); - register int a, line_cnt, line_limit; struct key *prev = NULL; + register int a, line_limit; + int scan_cnt, line_cnt = 0, key_cnt = 0; + char kbuf[96]; + if(keyf == NULL) { if(ENABLED_OPT(NORMALVERBOSE)) printf("sntp auth_init: Couldn't open key file %s for reading!\n", keyfile); @@ -99,7 +100,7 @@ auth_init ( line_limit = 0; fgets(kbuf, 96, keyf); - + for(a=0; akey_id, &act->type, act->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); -#endif - - if(act->type != 0) { - if(line_cnt == 0) { + if((scan_cnt = sscanf(kbuf, "%i %c %16s", &act->key_id, &act->type, act->key_seq)) == 3) { + act->key_len = strlen(act->key_seq); + + if(act->type != 0) { *keys = act; prev = act; } @@ -132,8 +129,21 @@ auth_init ( prev = act; } - line_cnt++; + key_cnt++; + +#ifdef DEBUG + printf("sntp auth_init: key_id %i type %c with key %s\n", act->key_id, act->type, act->key_seq); +#endif + } + else { +#ifdef DEBUG + printf("sntp auth_init: scanf read %i items, doesn't look good, skipping line %i.\n", scan_cnt, line_cnt); +#endif + + free(act); } + + line_cnt++; } fclose(keyf); @@ -143,7 +153,7 @@ auth_init ( printf("sntp auth_init: Read %i keys from file %s:\n", line_cnt, keyfile); struct key *kptr = *keys; - for(a=0; akey_id, kptr->type, kptr->key_seq, kptr->key_len); kptr = kptr->next;